协议在Swift中包含枚举时检查协议一致性?

Joh*_*ton 6 enums protocols swift

在Swift中,为了检查协议是否符合isas?向下转换,您必须使用@objc属性标记协议.一旦您使用该属性标记协议,您似乎无法将枚举作为属性,因为枚举无法在Objective-C中表示.

enum Language:String {
    case English = "English"
    case Spanish = "Spanish"
    case German = "German"
}

@objc protocol Humanizable {
    var language:Language { get set }
}
Run Code Online (Sandbox Code Playgroud)

你会收到一个错误: error: property cannot be marked @objc because its type cannot be represented in Objective-C

以下是完整示例:http://swiftstub.com/475659213/

在示例中,如果您更改LanguageString然后它工作正常.

Col*_*inE 0

这不是答案,但我确实在您的“swift 存根”中发现了编译错误,Human应定义如下:

class Human:Humanizable {
  var name:String = "Frank"
  var language:Language = .English
}
Run Code Online (Sandbox Code Playgroud)

您试图从字符串文字创建枚举实例。

我有点惊讶协议一致性检查的要求@obj——这太丑了!