Как переменная может быть типом класса и почему это необходимо, когда вы можете просто создать экземпляр класса?
Очевидно, вы можете просто создать экземпляр класса:
var person = Person(...) // Note, class names generally begin with uppercase letter
Но учтите следующее:
var person: Person!
Это означает, что person
теперь является Необязательным, который может ссылаться на экземпляр Person
. И !
указывает на то, что этот необязательный параметр будет неявно развернут, когда вы ссылаетесь на него в своем коде.
Таким образом, вопрос в том, почему вы используете последний (неявно развернутая ссылка, которая еще не установлена), а непервое (просто создание экземпляра Person
немедленно). Ответ заключается в том, что вы обычно делаете это, когда переменная person
просто не может быть установлена изначально, но будет установлена позже.
Типичным примером будет контроллер представления «детали», который покажет нам подробности оPerson
объект, выбранный из контроллера предварительного просмотра. Если этот контроллер подробного представления создается, например, из сцены раскадровки, очевидно, что переменная person
еще не установлена, поэтому она должна быть необязательной. Но контроллер представления (или координатор, или кто-то еще) установит ссылку person
после того, как будет впервые создан контроллер вида сцены, но до того, как контроллер представления появится на экране. Например, мы могли бы установить person
пункта назначения в методе prepare(for:sender:)
контроллера представления.
Таким образом, в этом случае мы объявили бы person
как Необязательный (чтобы экземпляр контроллера представления мог быть создан, хотя person
еще не установлен), но объявляем его неявно развернутым (Person!
), потому что мы знаем, что докладчик обязательно установит person
до того, как контроллер представления сведений появится на экране.