Я не понимаю, так как это класс без параметров. Я понятия не имею
что такое параметр from.
Я не получаю ошибку, когда запускаю следующее:
class Articles: Codable {
let value: [Articles]?
init() {
value = nil
print("in init()")
}
}
var x = Articles()
выход:
in init()
и без init()
:
class Articles: Codable {
let value: [Articles]?
// init() {
// value = nil
// print("in init()")
// }
}
var x = Articles() //Missing argument for parameter 'from' in call
Сначала прочитайте это :
Автоматическое наследование инициализатора
Как упоминалось выше, подклассы не наследуют свой суперкласс
инициализаторы по умолчанию. Однако инициализаторы суперкласса
автоматически наследуется, если соблюдены определенные условия. На практике,
это означает, что вам не нужно писать переопределения инициализатора во многих
общие сценарии, и может наследовать ваши инициализаторы суперкласса с
минимальные усилия, когда это безопасно.
Предполагая, что вы предоставляете значения по умолчанию для любых новых свойств, которые вы
ввести в подкласс, применяются следующие два правила:
Правило 1 Если ваш подкласс не определяет назначенные инициализаторы, он
автоматически наследует все инициализаторы, назначенные для суперкласса.
Если вы посмотрите на документы , Codable
- это typealias
для протокола Decodable
(протокол похож на интерфейс в Java). Протоколы определяют функции, которые класс должен реализовывать, если они принимают протокол. Ваш класс Articles
принимает протокол Decodable
. Тем не менее, документы для Decodable скажем,
init(from: Decoder)
Создает новый экземпляр путем декодирования из данного декодера. Необходимые.
Предоставлена реализация по умолчанию .
Протоколы могут на самом деле реализовывать функции с помощью расширений , которые затем наследуются классом, принимающим протокол.
В результате единственный обозначенный инициализатор для вашего класса - это тот, который определен в протоколе Decodable
, который принимает один аргумент - который вы наследуете согласно Rule 1
. С другой стороны, когда вы явно определяете другой назначенный инициализатор в вашем классе, который не принимает аргументов, вы будете вызывать этот инициализатор, когда вы не предоставите аргументов.