Swift 4.2错误:对类使用未实现的初始化程序'init()'

时间:2018-10-04 06:59:55

标签: hash xcode10 swift4.2

我有一个这样的班级:

class SomeRequest: Hashable {
    let parameter: String

    init(parameter: String) {
        self.parameter = parameter
    }

    var hashValue: Int {
        return parameter.hashValue
    }
}

比起尝试通过键(其中键为SomeRequest)将值设置为Dictionary的方法:

let request = SomeRequest(parameter: "Some")
let dictionary: [SomeRequest: Any] = [:]
dictionary[request] = ...

所有这些之后,我得到以下错误:“ 对类使用未实现的初始化程序'init()'

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

Swift 4.2已更改协议可哈希。您可以看到新的功能:

public func hash(into hasher: inout Hasher) 

崩溃的原因是,hash(into:)调用SomeRequest.init()。 您可以说:嘿,我不采用hash(into:)方法!但是swift确实在幕后。

对于需要实现hash(into :)的修复程序:

class SomeRequest: Hashable {
let parameter: String

init(parameter: String) {
    self.parameter = parameter
}

func hash(into hasher: inout Hasher) {
    hasher.combine(self.parameter)
}
}

现在,您可以删除 vashValue 。它是由hash(into :)自动计算的。

答案 1 :(得分:2)