【发布时间】:2014-11-09 09:22:54
【问题描述】:
在 Swift 中,为了检查协议与 is 或 as? 向下转换的一致性,您必须使用 @objc 属性标记协议。一旦你用那个属性标记了一个协议,你似乎就不能拥有一个带有枚举作为属性的协议,因为枚举不能在 Objective-C 中表示。
enum Language:String {
case English = "English"
case Spanish = "Spanish"
case German = "German"
}
@objc protocol Humanizable {
var language:Language { get set }
}
你会得到一个错误:error: property cannot be marked @objc because its type cannot be represented in Objective-C
这里是完整的例子:http://swiftstub.com/475659213/
在示例中,如果您将Language 更改为String,则它可以正常工作。
【问题讨论】:
-
感谢 swiftstub.com 链接,非常有用!也是一个有趣的问题。
-
@Graff 没有问题。至少您可以尝试一下,看看我面临的问题。
-
是的,我明白了。我胡思乱想了一下,但还没有想出任何东西。希望那里有一个好的答案,我能想到的最多的是使用 Int 或 String 代替枚举。