Enums 当协议包含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

在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不能标记为@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属性时,您才能检查协议的一致性。