Enums 当协议包含Swift中的枚举时检查协议一致性?
在Swift中,为了检查协议是否符合Enums 当协议包含Swift中的枚举时检查协议一致性?,enums,swift,protocols,Enums,Swift,Protocols,在Swift中,为了检查协议是否符合is或as?向下广播,必须使用@objc属性标记协议。一旦您使用该属性标记协议,似乎就不能将带有枚举的协议作为属性,因为枚举不能在Objective-C中表示 enum Language:String { case English = "English" case Spanish = "Spanish" case German = "German" } @objc protocol Humanizable { var lang
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不能标记为@objc,因为它的类型不能在Objective-C中表示
以下是完整的示例:
在本例中,如果您将语言
更改为字符串
,则它可以正常工作 这不是答案,但我确实在您的“swift存根”中发现了一个编译错误,Human
应定义如下:
class Human:Humanizable {
var name:String = "Frank"
var language:Language = .English
}
您试图从字符串文字创建枚举实例
我有点惊讶协议一致性检查需要@obj
-这太难看了 谢谢你的swiftstub.com链接,非常有用!这也是一个有趣的问题。@Graff没问题。至少你可以试一下,看看我面临的问题。是的,我明白了。我有点胡闹,但还没想出什么办法。希望有一个很好的答案,我能想到的最多的方法是使用Int或字符串来代替enum。可能是Yah的重复。这很奇怪:“只有当您的协议直接从iBook中标记为@objc属性时,您才能检查协议的一致性。