【发布时间】:2015-09-03 06:13:44
【问题描述】:
这里有个简短的问题:
我有一个协议protocol SCResourceModel {..} 和一个字典,该字典将使用此协议类型作为键:[SCResourceModel : String]。
这显然不起作用,因为字典中的键必须符合协议Hashable。让我的SCResourceModel 继承自Hashable 或尝试类似[protocol<SCResourceModel, Hashable> : String] 的方法显然效果不佳,因为Hashable 或Equatable 只能用作通用约束,而不能用作类型本身。
我观看了 WWDC 2015,在 Swift 2.0 中可以向协议添加约束,例如:protocol SCResourceModel where Self: Hashable {..},它直接解决了这个问题(非常好)。
无论如何,我的问题是:我可以用当前的 Swift 1.2 版本做类似的事情,并以某种方式使用这个协议作为字典的键吗?或者任何人都可以提出一个很好的解决方法或我可能忽略的其他东西?
我目前看到的 Swift 1.2 的唯一解决方案是将协议转换为继承自例如的类。 NSObject 并且必须被子类化以便在我的 API 中进一步使用。
感谢您的帮助!
【问题讨论】:
-
你可能是指 Swift 1.2,没有 1.3。它应该像
protocol SCResourceModel : Hashable {}一样工作,或者你有错误吗?如果是这样,请显示您的(最少)代码 -
我修复了版本 :) 您的建议不起作用,因为这会使
SCResourceModel成为Hashable类型。不允许将 this 作为 Type 仅用作泛型约束(它也不编译)。代码几乎已经在问题中了。一个协议和一个字典,两行。如果您还有其他问题,请告诉我。
标签: ios macos swift dictionary protocols