Основы Swift / 2.11. Опционалы


Видео


Опционалы
Вы можете использовать опционалы в ситуациях, когда у величины может не быть значения. Опционал отражает две возможности: у величины либо может быть значение и Вы можете его распаковать для использования, либо значения вовсе нет.

Здесь Вы можете увидеть пример того, как опционалы могут быть использованы для отражения отсутствия значения. Swift тип Int имеет иницииализатор, который пробует конвертировать строковое значение в целое число. Однако не всякая строка может быть преобразована в целое. Строка possibleNumber со значением"123" может быть преобразована в числовое значение 123, но строка "hello, world" не содержит числового значения для преобразования. convertedNumber в итоге имеет тип Int?, а не просто Int.

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