Вы находитесь на странице: 1из 7

OPTIONALS

Заметки
• Optional - это контейнер: может содержать любой тип данных или nil

• Зачем нужно:
• Компилятор будет обязывать проверять значения указанных переменных на пустоту (nil)
• Не сможете присвоить nil в обычную переменную (если она не Optional)

• В API библиотек большинство переменных или констант – Optional

• В Java также доступен класс Optional (все больше библиотек и фреймворков сейчас переходят на этот тип)

• При конвертации значений – часто возвращается Optional


Optional

• Контейнер можно очищать (присваивать nil), изменять


значение 10

• У контейнера есть тип (Int, String и т.д.)

• Контейнер – принимает значения только объявленного типа

• Для работы со значением контейнера – нужно всегда


извлекать это значение
Извлечение
• Явное (force unwrapping) – символ “?” при объявлении
• Извлечение значения вручную, где это необходимо в коде
• Для переменных, которые часто могут быть nil
• Для всех вариантов, где не подходит implicit unwrapping

• Неявное (implicit unwrapping) – символ “!” при объявлении


• Для переменных или констант, которые нужно обязательно один раз заполнить (проинициализировать) и потом
везде использовать
• Константы, которые инициализируются при создании объекта
• Позволяет НЕ выполнять извлечение значений вручную по всему коду

• Если попытаться извлечь значение из контейнера, где будет nil - runtime ошибка – одна из самых неприятных для
разработчика, т.к. возможно «падение» приложения (поэтому лучше отлавливать на этапе компилятора)
Проверка
• Желательно использовать проверку на nil перед использованием переменной (т.е. сразу не извлекать):

• Optional Binding (if let, guard let, switch-let) – вместо let можно использовать var

• Optional Chaining – сокращенный вариант проверки на nil (без использования лишних if)

• Nil coalescing – присвоение значения по-умолчанию, если получили nil


if let

Частая конструкция в коде:

• If var - если нужно изменять переменную в блоке

• If let - если нужно только получить значение и использовать его блоке


Домашнее задание

• Выполнить Hometask

• Прочитать раздел «Optionals»


• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.h
tml

Оценить