如何解决Swift [1,2]符合AnyObject,但[Enum.a,Enum.b]不符合
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中是类型错误?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。