Тип «Пользователь» не соответствует протоколу «Hashable».

class User: Mappable, CustomStringConvertible, Hashable{

    static func == (lhs: WUser, rhs: WUser) -> Bool {
        return lhs.name == rhs.name 
    }
    var name: String?
    var email: String?
    .
    .
  }

Где Mappable

protocol Mappable: Codable {
    init?(jsonData: Data?)
    init?(jsonString: String)
}

Но там говорится, Тип «Пользователь» не соответствует протоколу «Hashable».


person Mad Burea    schedule 23.10.2019    source источник


Ответы (1)


Помните, что когда вы согласовываете свой тип с 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)

person Kamran    schedule 24.10.2019