Swift [1,2]符合AnyObject,但[Enum.a,Enum.b]不符合

And*_*can 10 enums types swift

我在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
Run Code Online (Sandbox Code Playgroud)

当然我可以通过将我的枚举转换为字符串或数字来解决这个问题,但为什么这是Swift中的类型错误?

vac*_*ama 24

AnyObject存在与Objective-C的兼容性.您只能将对象放入[AnyObject]Objective-C可以解释的数组中.Swift枚举与Objective-C不兼容,因此您必须将它们转换为.

var x: AnyObject = [0, 1]因为Swift会自动处理Objective-C可以处理Int的类型的转换NSNumber.不幸的是,Swift枚举没有这样的自动转换,所以你可以做以下事情:

var y: AnyObject = [E.a.rawValue, E.b.rawValue]
Run Code Online (Sandbox Code Playgroud)

这假设您的枚举具有Objective-C可以处理的基础类型,例如StringInt.

另一个不起作用的例子是可选的.

var a: Int? = 17
var b: AnyObject = [a]  // '[Int?]' is not convertible to 'AnyObject'
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅使用Cocoa数据类型.