升級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即可.