Cla*_*ges 7 objective-c swift swift5 xcode10.2
从Xcode 10.2开始,使用我在Objective-C中定义的枚举时,但是在Swift 5 switch语句中,即使我用尽了所有可能的枚举值,我也会收到以下警告。
Switch covers known cases, but 'MyObjectiveCEnumName' may have additional
unknown values
Run Code Online (Sandbox Code Playgroud)
Xcode告诉我应该通过以下方法解决此问题
Handle unknown values using "@unknown default"
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该怎么办?
Objective-C列举
typedef NS_ENUM(NSUInteger, CardColor) {
CardColorBlack,
CardColorRed
};
Run Code Online (Sandbox Code Playgroud)
Swift 5开关声明
var cardColor: CardColor = .black
switch (cardColor) {
case .black:
print("black")
case .red:
print("red")
}
Run Code Online (Sandbox Code Playgroud)
Cla*_*ges 11
如果要像对待Swift对象一样对待Objective-C枚举,则现在需要使用另一个宏NS_CLOSED_ENUM(而不是旧的)声明它们NS_ENUM。更改此设置将使警告消失。
在Swift 5模式下,需要切换在Objective-C中声明的枚举或来自系统框架的枚举来处理未知情况-将来可能会添加的情况,或者可能在Objective-C实现文件中私下定义的情况。形式上,Objective-C允许将任何值存储在枚举中,只要它适合基础类型即可。可以使用新的@unknown默认案例来处理这些未知案例,如果从开关中忽略了任何已知案例,该默认案例仍会提供警告。也可以使用正常的默认情况处理它们。
如果您在Objective-C中定义了自己的枚举,并且不需要客户端来处理未知情况,则可以使用NS_CLOSED_ENUM宏而不是NS_ENUM。Swift编译器可以识别这种情况,不需要开关具有默认大小写。
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |