Ошибка Swift 4.2: использование не реализованного инициализатора 'init ()' для класса - PullRequest
0 голосов
/ 04 октября 2018

У меня есть такой класс:

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 ()' для класса "

В чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Подробно вы можете узнать, что нового в Hashable здесь: https://www.hackingwithswift.com/articles/115/swift-4-2-improves-hashable-with-a-new-hasher-struct

0 голосов
/ 04 октября 2018

Swift 4.2 изменил протокол Hashable .Вы можете увидеть новый func:

public func hash(into hasher: inout Hasher) 

Причиной сбоя является то, что хэш (в:) вызывает SomeRequest.init ().Вы можете сказать: Привет, я не использую метод хэширования (в:)1010 * class SomeRequest: Hashable { let parameter: String init(parameter: String) { self.parameter = parameter } func hash(into hasher: inout Hasher) { hasher.combine(self.parameter) } } Теперь вы можете удалить vashValue .Он вычисляется по хешу (в :) автоматически.

...