#initialization #swift
#инициализация #swift
Вопрос:
class Something {
...
}
class AnotherThing {
let foo: Something
init(something: Something) {
foo = something
}
}
class ReallyGreatClass {
let aSomething = Something();
let anotherThing = AnotherThing(something: aSomething);
}
ReallyGreatClass
выдает следующую ошибку компилятора:
Действительно отличный класс.У типа нет элемента с именем ‘aSomething’
В главе об инициализации языка программирования Swift под подзаголовком Установка значения свойства по умолчанию с помощью замыкания или функции они отбрасывают концепцию инициализации значения свойства по умолчанию с помощью замыкания; так что давайте рассмотрим это:
let anotherThing: AnotherThing = {
return AnotherThing(something: aSomething)
}()
Ну, конечно, это не работает — это не предполагается. Как указано в главе:
Если вы используете замыкание для инициализации свойства, помните, что остальная часть экземпляра еще не была инициализирована в момент выполнения замыкания. Это означает, что вы не можете получить доступ к любым другим значениям свойств из вашего закрытия, даже если эти свойства имеют значения по умолчанию. Вы также не можете использовать неявное свойство self или вызывать какой-либо из методов экземпляра.
Итак, единственный способ, который я нашел для решения этой проблемы, — включить метод инициализатора:
init() {
anotherThing = AnotherThing(something: aSomething)
}
Но, кажется странным, что мне понадобится однострочный метод инициализации только для настройки anotherThing
свойства. Мне интересно, не пропустил ли я что-то и есть ли способ установить значение свойства по умолчанию, не требуя инициализатора.
Ответ №1:
Вы ничего не пропустили. Если вы хотите использовать другое свойство при инициализации, вы должны использовать метод инициализации.