【问题标题】:Swift 4.2 error: use of unimplemented initializer 'init()' for classSwift 4.2 错误:对类使用未实现的初始化程序“init()”
【发布时间】:2018-10-04 06:59:55
【问题描述】:

我有这样的课:

class SomeRequest: Hashable {
    let parameter: String

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

    var hashValue: Int {
        return parameter.hashValue
    }
}

然后我尝试通过键为字典设置值,其中键是 SomeRequest:

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

毕竟我得到这个错误:“使用未实现的初始化程序'init()'用于类

可能是什么问题?

【问题讨论】:

    标签: hash xcode10 swift4.2


    【解决方案1】:

    Swift 4.2 更改了协议 Hashable。你可以看到新的功能:

    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:) 自动计算出来的。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2019-04-23
        • 2018-09-10
        • 1970-01-01
        • 2014-07-25
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多