Ответ
Безопасные способы:
-
Optional Binding (if-let)
if let value = optionalValue { // Используем value как не-опциональный тип print(value) } -
Guard Statement
guard let value = optionalValue else { // Ранний выход при nil return } // value доступен в текущей области видимости print(value) -
Nil-Coalescing Operator (??)
let result = optionalValue ?? defaultValue let count = user?.orders?.count ?? 0 -
Optional Chaining
let streetName = user?.address?.street?.name // String? let count = user?.friends?.count // Int? -
map() и flatMap() (compactMap для коллекций)
let length = optionalString.map { $0.count } // Int? let numbers = optionalArray.flatMap { $0.filter { $0 > 0 } }
Небезопасные способы (используйте с осторожностью):
-
Force Unwrap (!)
let value = optionalValue! // Крашнет при nil -
Implicitly Unwrapped Optional
var name: String! = "John" // Автоматически разворачивается при доступе print(name) // Не требует ! -
Switch Pattern Matching
switch optionalValue { case .some(let value): print("Значение: (value)") case .none: print("Значение отсутствует") }
Рекомендации:
- Избегайте force unwrap в production коде
- Используйте guard для ранних проверок
- Применяйте optional chaining для работы с вложенными опционалами