Быстрые переменные украшения с "?"(вопросительный знак) и "!" (восклицательный знак)
Я понимаю, что в Swift все переменные должны быть установлены со значением, и что с помощью optionals мы можем установить переменную, которая будет установлена в nil
изначально.
что я не понимаю, что установка переменной с !
делает, потому что у меня сложилось впечатление, что это "разворачивает" значение из необязательного. Я думал, что таким образом вы гарантируете, что в этой переменной есть значение для разворачивания, поэтому на IBActions и т. д. Вы его видите используемый.
проще говоря, что такое переменная инициализируется, когда вы делаете что-то вроде этого:
var aShape : CAShapeLayer!
и почему / когда я должен это сделать?
1 ответ:
в объявлении типа
!
похож на?
. Оба являются необязательными, но!
это "неявно развернул" дополнительно, что означает, что вам не нужно разворачивать его, чтобы получить доступ к значению (но оно все равно может быть нулевым).это в основном поведение, которое мы уже имели в objective-c. a value можете быть nil, и вы должны проверить его, но вы также можете просто получить доступ к значению напрямую, как если бы это не было необязательным (с важным разница в том, что если вы не проверяете на ноль, вы получите ошибку времени выполнения)
// Cannot be nil var x: Int = 1 // The type here is not "Int", it's "Optional Int" var y: Int? = 2 // The type here is "Implicitly Unwrapped Optional Int" var z: Int! = 3
использование:
// you can add x and z x + z == 4 // ...but not x and y, because y needs to be unwrapped x + y // error // to add x and y you need to do: x + y! // but you *should* do this: if let y_val = y { x + y_val }