Опциональные возможности — важная концепция в программировании, особенно в таких языках, как Swift, Kotlin и других, целью которых является предотвращение исключений нулевого указателя и обеспечение более безопасной обработки значений, допускающих значение NULL.

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

Вступление:

Swift проводит очень четкое различие между «нет значения» и всеми остальными значениями. «Нет значения» обозначается как nil и отличается от всех остальных типов.

Если вы хотите, чтобы переменная иногда могла иметь нулевое значение, сделайте ее необязательнойпеременной.

Только необязательные переменные могут быть установлены в ноль. Если переменная не определена как необязательная, ей не разрешено присваивать нулевое значение:

var aNonOptionalInteger = 42 // Nonoptional (regular), NOT allowed to be nil
aNonOptionalInteger = nil // ERROR: only optional values can be nilss

Вы можете проверить, имеет ли необязательная переменная значение, используя оператор if:

Обратите внимание: если вы развернете необязательную переменную, и она не будет иметь значения, ваша программа выдаст ошибку выполнения и произойдет сбой.

Разворачивание:

Чтобы получить доступ к значению, хранящемуся в необязательном параметре, вам необходимо «развернуть» его. Есть несколько способов сделать это:

  • Принудительное развертывание(!): это рискованно, и его следует избегать, если это возможно. Он принудительно разворачивает необязательный параметр, что приводит к сбою во время выполнения, если необязательный параметр равен нулю.
  • Необязательная привязка (if let или guard let): безопасно проверяет, содержит ли необязательный параметр значение, а затем привязывает его к временной переменной в области действия условного блока.
  • Объединение Nil (??): предоставляет значение по умолчанию, если необязательное значение равно нулю, что позволяет корректно обрабатывать отсутствие значения.
  • Необязательная цепочка: позволяет вызывать методы, получать доступ к свойствам или индексировать необязательный параметр, если он не равен нулю, сокращая его, если необязательный параметр равен нулю.
var name: String? // Declare an optional String variable
name = "John" // Assign a value to the optional

// Forced Unwrapping (risky, can lead to a crash if nil)
let unwrappedName = name!
print("Name…