例如,定义了以下 NS_Enum...
typedef NS_ENUM(NSInteger, Type) {
TypeNone = 0,
TypeA = 1,
}
var x = 2
if let type: Type = Type(rawValue: x) {
// Swift 1.2 executes this block.
}
else {
// Previous swift executes this block.
}
如何确定 x 是否在 NS_ENUM 上定义?
I assume这是 Swift 1.2 中以下更改的结果,记录在
这Xcode 6.3 发行说明:
导入的 NS_ENUM 类型具有未记录的值,例如UIViewAnimationCurve
,现在可以从原始整数转换
值使用init(rawValue:)
初始化器而不被重置为nil
。使用的代码unsafeBitCast
作为此问题的解决方法可以
被编写为使用原始值初始值设定项。例如:
let animationCurve =
unsafeBitCast(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue,
UIViewAnimationCurve.self)
现在可以写成:
let animationCurve = UIViewAnimationCurve(rawValue:
userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)!
问题(如果我理解正确的话)是
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) { ... }
仅定义了 4 个可能的枚举值,但实际上可以采用其他值
(未记录的)值也是如此。这使得需要一些令人讨厌的解决方法,例如
- 如何将原始值 7 强制写入 UIViewAnimationCurve 枚举?
为了解决这个问题,Swift 1.2 现在允许创建
枚举变量与随意的原始值(底层的
整数类型),如果枚举是从NS_ENUM
定义。
其结果是,不可能以编程方式检查是否
“原始值”是定义值之一NS_ENUM
定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)