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

时间:2014-09-15 19:00:24

标签: enums swift protocols

在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 }
}

您将收到错误:error: property cannot be marked @objc because its type cannot be represented in Objective-C

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

在示例中,如果您将Language更改为String,那么它可以正常工作。

1 个答案:

答案 0 :(得分:0)

这不是答案,但我确实发现了你的快速存根中的编译错误,Human应定义如下:

class Human:Humanizable {
  var name:String = "Frank"
  var language:Language = .English
}

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

我对协议一致性检查需要@obj感到有些惊讶 - 这只是丑陋!