Я исследовал разницу между! а также ? в объявлении var.
Кратко о моем вопросе
If you call unwrap! on a a var declared with ! - why isnt this a double unwrap?
Я создал два IBOutlet, вот тогда! используется много
@IBOutlet weak var searchBar1: UISearchBar? //"Optional"
@IBOutlet weak var searchBar2: UISearchBar! //"Implicitly Unwrapped Optional"
Я понимаю, что если количество розеток не равно нулю, то все они будут работать.
self.searchBar1!.text = "dd" //builds ok but crashes on nil
self.searchBar2!.text = "dd" //builds ok but crashes on nil
self.searchBar1?.text = "dd1" //builds ok but does nothing on nil
self.searchBar2?.text = "dd1" //builds ok but does nothing on nil
//---
self.searchBar1.text = "dd2" //ERROR: 'UISearchBar?' does not have a member named 'text'
self.searchBar1!.text = "dd2" //OK: must unwrap Optional(UISearchBar) to UISearchBar
self.searchBar1!.text = "dd2" //OK: must unwrap Optional(UISearchBar) to UISearchBar
self.searchBar2.text = "dd2" //ok unwrap declared in var but will crash if nil
//----
Правильно ли я думаю, что последняя строка работает, потому что развертка находится в объявлении var
это работает, потому что Unwrap! находится в объявлении var
self.searchBar2.text = "dd2"
Почему не вылетает - разве это не двойное разворачивание
self.searchBar2!.text = "dd"
self.searchBar является необязательным (UISearchBar) >> Unwrap! self.searchBar2! >> UISearchBar