我在AppDelegate中,尝试传递对WatchKit扩展请求的答复。我不能使用枚举数组作为其值键入为AnyObject的Dictionary中的值。在操场上进行实验显示:
enum E : Int { case a = 0 case b } var x : AnyObject = [0, 1] // OK var y : AnyObject = [E.a, E.b] // [E] is not convertible to AnyObject
当然,可以通过将枚举转换为字符串或数字来解决此问题,但是为什么这在Swift中是类型错误?
AnyObject为了与Objective-C兼容而存在。您只能将对象放入[AnyObject]Objective- C可以解释的数组中。Swift枚举与Objective-C不兼容,因此您必须将它们转换为。
AnyObject
[AnyObject]
var x: AnyObject = [0, 1]之所以起作用,是因为Swift会自动处理Object- C可以处理Int的类型转换NSNumber。不幸的是,Swift枚举没有这种自动转换,因此您需要做以下事情:
var x: AnyObject = [0, 1]
Int
NSNumber
var y: AnyObject = [E.a.rawValue, E.b.rawValue]
假设您的枚举具有Objective-C可以处理的基础类型,例如String或Int。
String
无效的另一个示例是可选的。
var a: Int? = 17 var b: AnyObject = [a] // '[Int?]' is not convertible to 'AnyObject'
有关更多信息,请参见使用可可数据类型。