在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
,那么它可以正常工作 .
1 回答
这不是答案,但我确实在'swift stub'中发现了编译错误,
Human
应定义如下:您试图从字符串文字创建枚举实例 .
我有点惊讶协议一致性检查需要
@obj
- 这只是丑陋!