Я уверен, что это может быть дубликат, но я не могу найти никаких подробных и компактных объяснений, так что вот оно.Об объявлении опциональных и необязательных в Swift
Мы все знаем, что, если мы объявляем переменную, как этот
1> var a : String?
мы получаем дополнительный
a: String? = nil
и если мы опустим ?
мы должны инициализировать a
к чему-то другому, чем nil
во время создания. Однако, если мы говорим, что-то вроде
2> var a : String!
мы получаем
a: String! = nil
который путает меня не конца, потому что я был в предположении, что это заявление означает, что a
не может быть необязательным. Так, играя с РЕПЛ, я получаю следующие результаты: bemusing
3> a!
fatal error: unexpectedly found nil while unwrapping an Optional value
4> a as! String
fatal error: unexpectedly found nil while unwrapping an Optional value
5> a as! String?
$R2: String? = nil
6> a as? String
fatal error: unexpectedly found nil while unwrapping an Optional value
7> a as? String!
$R3: String!? = nil
Может кто-то обеспечить некоторый свет в это?
Пожалуйста, прочитайте раздел о 'неявной развернутого цикла Optionals' в руководстве Swift Язык: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309 – vadian