Молча терпеть неудачу
Опции - отличная особенность Swift, позволяющая работать с объектами *, которые либо есть, либо нет.
Одна из стратегий, позволяющих избежать принудительного разворачивания этих объектов * (и, возможно, возникновения неприятного сбоя), состоит в том, чтобы запросить их и вернуть значение, если оно существует, или ноль, если оно не существует.
Вы можете связать их вместе. В этой статье подробно рассказывается об этих цепочках и о том, как они могут помочь вам в написании кода.
* Под объектами здесь подразумеваются свойства, индексы и методы, а не формальные объекты, как они обычно определяются в этих статьях.

Сложность: Начинающий | Легко | Нормальный | Испытывающий
Предпосылки:
- Это подробное руководство, основанное на моей статье о принудительном разворачивании (руководство ЗДЕСЬ)
- Эта конкретная статья ссылается на связанный список и идентификаторы доступности.
Терминология
block: способ описания замыканий в Swift (особенно используется людьми с опытом работы с Objective-C).
Принудительное развертывание: метод, в котором необязательный параметр принудительно возвращает конкретное значение. Если необязательный параметр равен нулю, это приведет к сбою
Необязательно: Swift представил дополнительные опции, которые обрабатывают отсутствие значения, просто объявляя, есть ли значение или нет. Необязательный параметр - это отдельный тип!
Необязательная цепочка: объединение нескольких дополнительных элементов в оператор. Вся цепочка выходит из строя, если какое-либо звено в цепочке равно нулю.
Строка: набор символов.
Знак вопроса?
Optional chaining используете? для вызова объекта * либо возвращается значение, либо ноль. Это альтернатива использованию! к force unwrap опциям, которые могут вызвать довольно неприглядный сбой (что даже хуже, чем кажется, поскольку это будет ошибка времени выполнения, которая доставит вашему пользователю неприятные ощущения).
Поэтому, когда мы используем необязательные параметры, возможно, для создания optional String, который может содержать либо значение, либо ноль.
Поэтому мы можем создать переменную, которая сначала равна нулю, а затем присвоить ей значение:
var str: String? = nil
str = "A test String"
Когда мы распечатываем значение из str, мы видим, что String выводится как Optional в консоль:
print (str) // Optional("A test String")
После этого с! force разворачивает значение, что может привести к серьезному сбою
print (str!) // "A test String"
Теперь мы не можем (пока) просто добавить вопросительный знак? до конца выражения, так как компилятор выдает довольно неприятную ошибку:
print (str?) // Error
"?" Должен сопровождаться вызовом, поиском участника или нижним индексом.
что имеет смысл - в этих обстоятельствах мы можем использовать только optional chaining, и просто иметь один optional недостаточно!
Необязательная цепочка - пример из РЕАЛЬНОЙ ЖИЗНИ
Optionals повсюду в Swift, и необязательная цепочка - естественная функция, которую необходимо использовать.
Если мы настроим контроллер представления с изображением посередине, как показано на следующем экране:

Помещаем розетку в view controller
@IBOutlet weak var imageView: UIImageView!
который равен force unwrapped, когда мы его создаем (что дает некоторые довольно неприятные ошибки во время выполнения, если вы удалите imageView без удаления кода, но это урок для другого раза).
Итак, Swift предоставляет нам инструменты для доступа к UIImage внутри UIImageView, но это optional, иными словами, следующее имеет смысл:
let image: UIImage? = imageView.image
но на изображении есть и другие optional свойства. Это означает, что к необязательному изображению прикреплен accessibilityIdentifier. В коде:
imageView.image?.accessibilityIdentifier
поэтому оба / любое изображение может быть равно нулю (поэтому, если мы дадим строке переменную, т.е.
let optionalAI = imageView.image?.accessibilityIdentifier
optionalAI имеет тип String?)
Теперь, если image равен nil, тогда вся строка становится nil и предотвращает неприятный сбой!
Если изображение не равно нулю, то строка становится нулевой (или нет) в соответствии с accessibilityIdentifier. Аккуратно, правда?
Преимущества необязательного связывания
При использовании optional chaining вы получаете следующие фантастические преимущества:
- Избегайте неприятных сбоев
- Как говорят специалисты, более чистый код
- Код, который легче читать
- Намного проще проверять код
Заключение:
Optional Chaining в основном обозначается вопросительным знаком? И означает, что во время выполнения Swift проверяет значение слева от вопросительного знака. Это предотвращает неприятные сбои во время выполнения и помогает писать более производительный код.
Почему вам это не нужно?
Ответ, конечно, есть. Вы должны этого захотеть. Теперь у вас есть инструменты. Увидимся на другой стороне…
Расширьте свои знания
- У Apple есть руководство по опциональной цепочке (ЗДЕСЬ).
Контактное лицо в Twitter:
Любые вопросы? Вы можете связаться со мной здесь