问题描述
AnyObject
为了与Objective-C兼容而存在。您只能将对象放入[AnyObject]
Objective-
C可以解释的数组中。Swift枚举与Objective-C不兼容,因此您必须将它们转换为。
var x: AnyObject = [0, 1]
之所以起作用,是因为Swift会自动处理Object-
C可以处理Int
的类型转换NSNumber
。不幸的是,Swift枚举没有这种自动转换,因此您需要做以下事情:
var y: AnyObject = [E.a.rawValue, E.b.rawValue]
假设您的枚举具有Objective-C可以处理的基础类型,例如String
或Int
。
无效的另一个示例是可选的。
var a: Int? = 17
var b: AnyObject = [a] // '[Int?]' is not convertible to 'AnyObject'
有关更多信息,请参见使用可可数据类型。
解决方法
我在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中是类型错误?