Swift: почему IBoutlet не назначены (=) своему типу, вместо этого они просто имеют тип принудительной развертки (!) - PullRequest
0 голосов
/ 14 октября 2019

Мне было интересно, почему IBoutlets, такие как типы UILable, объявлены как:

@IBoutlet weak var theNameOfThelable: UILabel!

вместо: @IBoutlet weak var theNameOfThelable = UILabel()

и что произойдет, если я сделаю это:

@IBoutlet weak var theNameOfThelable = UILabel()

1 Ответ

3 голосов
/ 14 октября 2019

В приведенном ниже коде

@IBoutlet weak var theNameOfThelable: UILabel!

Вышеприведенный оператор является неявно развернутым необязательным . Это означает, что его значение будет назначено позже, а не только в init.

Кроме того, @IBOutlet будет назначаться автоматически после подключения розеток к раскадровке после init и до viewDidLoad().

С другой стороны,

@IBoutlet weak var theNameOfThelable = UILabel()

Здесь вы назначаете новый UILabel() экземпляр для outlet. Это не будет связано с storyboard.

. В обоих случаях UILabel! и UILabel() назначение различно. Вы все еще можете получить доступ к свойствам UILabel. Только если UILabel! не подключено перед его использованием, приложение вызовет исключение времени выполнения .

...