【问题标题】:Check protocol conformance when protocol contains an enum in Swift?当协议包含Swift中的枚举时检查协议一致性?
【发布时间】:2014-11-09 09:22:54
【问题描述】:

在 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,则它可以正常工作。

【问题讨论】:

  • 感谢 swiftstub.com 链接,非常有用!也是一个有趣的问题。
  • @Graff 没有问题。至少您可以尝试一下,看看我面临的问题。
  • 是的,我明白了。我胡思乱想了一下,但还没有想出任何东西。希望那里有一个好的答案,我能想到的最多的是使用 Int 或 String 代替枚举。

标签: enums swift protocols


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,这很奇怪:“只有当您的协议标有 @objc 属性时,您才能检查协议一致性”直接来自 iBook。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多