Swift 4.2 error: use of unimplemented initializer 'init()' for class
Swift 4.2 error: use of unimplemented initializer 'init()' for class
我有一个 class 这样的:
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()' 用于 class”
可能是什么问题?
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:) 自动计算的。
您可以在此处详细了解 Hashable 的新功能:
https://www.hackingwithswift.com/articles/115/swift-4-2-improves-hashable-with-a-new-hasher-struct
我有一个 class 这样的:
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()' 用于 class”
可能是什么问题?
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:) 自动计算的。
您可以在此处详细了解 Hashable 的新功能: https://www.hackingwithswift.com/articles/115/swift-4-2-improves-hashable-with-a-new-hasher-struct