Как вы разворачиваете Swift optionals?
как вы правильно разворачиваете как обычные, так и неявные опциональные?
в этой теме, похоже, есть путаница, и я просто хотел бы иметь ссылку на все способы и как они полезны.
В настоящее время существует два способа создания optionals:
var optionalString: String?
var implicitOptionalString: String!
каковы все способы развернуть оба? Кроме того, в чем разница между использованием !
и ?
во время распаковки?
3 ответов
есть много сходств и только несколько различий.
(Регулярные) Optionals
объявления:
var opt: Type?
небезопасно разворачивающий:
let x = opt!.property // error if opt is nil
безопасное тестирование наличие :
if opt != nil { ... someFunc(opt!) ... } // no error
безопасно разворачивать через вязку:
if let x = opt { ... someFunc(x) ... } // no error
безопасное сцепление:
var x = opt?.property // x is also Optional, by extension
безопасно коалесцирующий значения nil:
var x = opt ?? nonOpt
Неявно Развернутые Optionals
объявления:
var opt: Type!
-
небезопасно разворачивать (неявно):
let x = opt.property // error if opt is nil
небезопасно разворачивать через назначение:
let nonOpt: Type = opt // error if opt is nil
Unsafely разворачивать через параметр проходя:
func someFunc(nonOpt: Type) ... someFunc(opt) // error if opt is nil
безопасное тестирование существование:
if opt != nil { ... someFunc(opt) ... } // no error
безопасное сцепление:
var x = opt?.property // x is also Optional, by extension
безопасно срастанию значения nil:
var x = opt ?? nonOpt
С бета-версии 5 у нас также есть новый оператор объединения (??):
var a : Int?
let b : Int = a ?? 0
если необязательный != nil он развернут, иначе используется значение справа от оператора
необязательный тип означает, что переменная может быть nil.
пример:
var myString: Int? = 55
myString = nil
знак вопроса указывает, что он может иметь нулевое значение.
но если вы заявляете такой:
var myString : Int = 55
myString = nil
он покажет ошибку.
теперь, чтобы получить значение, вам нужно развернуть его:
print(myString!)
но если вы хотите развернуть автоматически:
var myString: Int! = 55
затем:
print(myString)
нет необходимости разворачивать. Надеюсь, так и будет. помощь.