在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
,那么它可以正常工作。
答案 0 :(得分:0)
这不是答案,但我确实发现了你的快速存根中的编译错误,Human
应定义如下:
class Human:Humanizable {
var name:String = "Frank"
var language:Language = .English
}
您试图从字符串文字创建枚举实例。
我对协议一致性检查需要@obj
感到有些惊讶 - 这只是丑陋!