Swift. Извлечение опционального значения
Назад · Оглавление · Дальше
Contents |
Опционал и базовый тип
Нельзя проводить прямые операции между значениями опционального и базового типов:
var a: Int = 1 var b: Int? = 2 a + b // Ошибка: несоответствие типов
Способы извлечения опционального значения:
- принудительное
- косвенное
- опциональное связывание
- операция объединения с nil
Принудительное извлечение значения
Принудительное извлечение (force unwrapping):
var a: Int? = 12 var b = 34 var c = a! + b // 46 type(of: a!) // Int.Type type(of: c) // Int.Type
Принудительное извлечение строки:
var name: String? = "Иван" var s = "Name: " + name! s // "Name: Иван"
Попытка принудительного извлечения значения nil:
var name: String? var s = "Name: " + name! // Fatal error: Unexpectedly found nil
Принудительное извлечение допустимо при гарантированном наличии значения в опционале.
Косвенное извлечение значения
Косвенное извлечение опционального значения (implicitly unwrapping):
var a: Double! = 3.14 // знак ? заменяется на ! a + 0.12 // 3.26 type(of: a) // Optional<Double>.Type
Косвенное извлечение допустимо, если в момент проведения операции,
опционал гарантированно содержит значение (не nil).
Далее к параметру можно обращаться без принудительного извлечения, так как оно происходит автоматически.
При этом, принудительное извлечение остается возможным: a + a! + 0.12
Косвенное извлечение может быть полезно при использовании в классе опционального параметра,
значение которого гарантированно инициализируется после создания экземпляра класса.
Это позволяет не использовать принудительное извлечение и опциональное связывание.
Проверка наличия значения в опционале
Проверка на nil:
var a: Int? var b: Int? = 32 a != nil // false b != nil // true
Проверка и принудительное извлечение опционала в условии:
var a: Int? = 8 var b = 2 if a != nil { b += a! } b // 10
Проверка и косвенное извлечение опционала в условии:
var a: Int! = 8 var b = 2 if a != nil { b += a } b // 10
Назад · Оглавление · Дальше