【发布时间】:2016-01-12 17:22:47
【问题描述】:
我正在尝试使用以下代码创建Observers 的Set:
protocol MyProtocol: Hashable {
typealias ConcreteType = Self
var identifier: String { get }
}
extension MyProtocol {
var hashValue: Int {
return identifier.hashValue
}
}
func ==<T: MyProtocol>(lhs: T, rhs: T) -> Bool {
return lhs.identifier == rhs.identifier
}
protocol Observer: Equatable, Hashable {
func identifierChanged<T: MyProtocol>(conformant: T)
}
extension Observer {
func identifierChanged<T: MyProtocol where T == T.ConcreteType>() {} //Optional implementation
}
但是,每当我尝试创建 Set<Observer>(即 let observerSet = Set<Observer>())时,都会收到以下错误:
不支持使用 'Observer' 作为符合协议 'Hashable' 的具体类型
Protocol 'Observer' 只能用作通用约束,因为它具有 Self 或关联的类型要求
有什么办法吗?
【问题讨论】:
标签: swift generics set swift2 protocols