Подтвердить что ты не робот

Могу ли я иметь функцию init в протоколе?

Когда я пытаюсь реализовать свой протокол таким образом:

protocol Serialization {
    func init(key keyValue: String, jsonValue: String)
}

Я получаю сообщение об ошибке: Ожидаемый идентификатор в объявлении функции.

Почему я получаю эту ошибку?

4b9b3361

Ответ 1

Да, вы можете. Но вы не ставите func перед init:

protocol Serialization {
    init(key keyValue: String, jsonValue: String)
}

Ответ 2

Ключевые моменты здесь:

  • Протокол и класс, который его реализует, никогда не имеют ключевого слова func перед методом init.
  • В вашем классе, поскольку в вашем протоколе был вызван метод init, теперь вам нужно префикс метода init с ключевым словом required. Это указывает на то, что протокол, который вам соответствует, требует, чтобы у вас был этот метод init (хотя вы, возможно, самостоятельно подумали, что это отличная идея).

Как описано другими, ваш протокол будет выглядеть следующим образом:

protocol Serialization {
    init(key keyValue: String, jsonValue: String)
}

И, как пример, класс, соответствующий этому протоколу, может выглядеть так:

class Person: Serialization {
    required init(key keyValue: String, jsonValue: String) {
       // your logic here
    }
}

Обратите внимание на требуемое ключевое слово перед методом init.