升级xCode10,项目中发现了一些crash.挺有意思,记录一下.项目为OC和Swift混编.
案例
swift:
enum SwiftEnum: Int {
case a = 0
case b
}
let enum1 = SwiftEnum.init(rawValue: 3)
enum1是什么?
oc:
typedef NS_ENUM(NSInteger, OCEnum) {
OCEnum1 = 0,
OCEnum2
};
OCEnum enum2 = (OCEnum)3
- (OCEnum)test {
return (OCEnum)5
}
enum2是什么
swift调用oc方法:
let enum3 = OCEnum(rawValue: 3)
let enum4 = oc.test()
enum3,enum4是什么?
答案:
enum1 = nil
enum2 = 3
enum3 = OCEnum类型的枚举,raw value为3,但被标记为invalid的不知道什么东西的内存数据
enum4同上
在xcode9中
使用在oc中使用enum2,enum3,enum4没有问题,被当做int使用即可.在swift中,因为swift语言级bug.
默认进入第一个case,有default也不会进入.修正该问题有一个trick.当enum有n个case,switch中只写了
n-2个case,则会进入default.
在xcode10中
该bug疑似被修复.该enum不会命中任何case,如果没有default,则crash.使用defalut即可.