Int
имеет иницииализатор, который пробует конвертировать строковое значение в целое число. Однако не всякая строка может быть преобразована в целое. Строка possibleNumber
со значением"123" может быть преобразована в числовое значение 123, но строка "hello, world" не содержит числового значения для преобразования. convertedNumber
в итоге имеет тип Int?
, а не просто Int
.
Int
, а не простой. Опциональный Int
записывается как Int?
, а не Int
. Знак вопроса обозначает, что значение является опциональным, то есть оно может быть каким-то значением Int
или не содержать ничего вообще. (Оно не может содержать что-то ещё, например Bool
или String
. Это либо Int
, либо ничего.)
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
nil
:
var serverResponseCode: Int? = 404
serverResponseCode = nil
Изначально serverResponseCode
[код ответа сервера] содержит значение 404 и всё с ним хорошо. Присвоив ответу сервера nil
, мы лишим опционал его значения.
nil
не может быть использован с неопциональными величинами. Если величина в Вашем коде должна работать с отсутствием значением в каких-то ситуациях, всегда объявляйте её опциональным значением подходящего типа.
var nonOptional = 1
nonOptional = nil
nil
:
var serverResponseCodeWithoutInitialValue: Int?