首页 文章

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

提问于
浏览
6

在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

    这不是答案,但我确实在'swift stub'中发现了编译错误, Human 应定义如下:

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

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

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

相关问题