类型 'User' 不符合协议 'Hashable'
Type 'User' does not conform to protocol 'Hashable'
class User: Mappable, CustomStringConvertible, Hashable{
static func == (lhs: WUser, rhs: WUser) -> Bool {
return lhs.name == rhs.name
}
var name: String?
var email: String?
.
.
}
可映射的位置
protocol Mappable: Codable {
init?(jsonData: Data?)
init?(jsonString: String)
}
但是它说,类型 'User' 不符合协议 'Hashable'
请记住,当您使类型符合 protocol
时,您需要实现该 protocol
所需的实体(属性、方法)。例如,Hashable 具有所需的方法 hash(into hasher: inout Hasher)
,因此您需要按如下方式实现该方法,
class WUser: Mappable, CustomStringConvertible, Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(self.name)
hasher.combine(self.email)
}
required init?(jsonData: Data?) {
}
required init?(jsonString: String) {
}
var description: String {
return self.name ?? ""
}
static func == (lhs: WUser, rhs: WUser) -> Bool {
return lhs.name == rhs.name
}
var name: String?
var email: String?
}
以上代码没有编译问题,因为我已经实现了每个 protocol
的所有要求(即 Mappable
、CustomStringConvertible
、Hashable
)
class User: Mappable, CustomStringConvertible, Hashable{
static func == (lhs: WUser, rhs: WUser) -> Bool {
return lhs.name == rhs.name
}
var name: String?
var email: String?
.
.
}
可映射的位置
protocol Mappable: Codable {
init?(jsonData: Data?)
init?(jsonString: String)
}
但是它说,类型 'User' 不符合协议 'Hashable'
请记住,当您使类型符合 protocol
时,您需要实现该 protocol
所需的实体(属性、方法)。例如,Hashable 具有所需的方法 hash(into hasher: inout Hasher)
,因此您需要按如下方式实现该方法,
class WUser: Mappable, CustomStringConvertible, Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(self.name)
hasher.combine(self.email)
}
required init?(jsonData: Data?) {
}
required init?(jsonString: String) {
}
var description: String {
return self.name ?? ""
}
static func == (lhs: WUser, rhs: WUser) -> Bool {
return lhs.name == rhs.name
}
var name: String?
var email: String?
}
以上代码没有编译问题,因为我已经实现了每个 protocol
的所有要求(即 Mappable
、CustomStringConvertible
、Hashable
)