Swift. Извлечение опционального значения
Line 2: | Line 2: | ||
[[Swift. Опциональный тип данных|Назад]] · | [[Swift. Опциональный тип данных|Назад]] · | ||
[[Swift|Оглавление]] · | [[Swift|Оглавление]] · | ||
− | [[Swift. | + | [[Swift. Опциональное связывание|Дальше]] |
Line 24: | Line 24: | ||
==Принудительное извлечение значения== | ==Принудительное извлечение значения== | ||
− | Принудительное извлечение (force unwrapping): | + | Принудительное извлечение ('''force unwrapping'''): |
<pre> | <pre> | ||
var a: Int? = 12 | var a: Int? = 12 | ||
Line 55: | Line 55: | ||
==Косвенное извлечение значения== | ==Косвенное извлечение значения== | ||
− | Косвенное извлечение опционального значения (implicitly unwrapping): | + | Косвенное извлечение опционального значения ('''implicitly unwrapping'''): |
<pre> | <pre> | ||
var a: Double! = 3.14 // знак ? заменяется на ! | var a: Double! = 3.14 // знак ? заменяется на ! | ||
Line 113: | Line 113: | ||
[[Swift. Опциональный тип данных|Назад]] · | [[Swift. Опциональный тип данных|Назад]] · | ||
[[Swift|Оглавление]] · | [[Swift|Оглавление]] · | ||
− | [[Swift. | + | [[Swift. Опциональное связывание|Дальше]] |
</div> | </div> |
Latest revision as of 15:02, 22 May 2022
Назад · Оглавление · Дальше
Contents |
[edit] Опционал и базовый тип
Нельзя проводить прямые операции между значениями опционального и базового типов:
var a: Int = 1 var b: Int? = 2 a + b // Ошибка: несоответствие типов
Способы извлечения опционального значения:
- принудительное
- косвенное
- опциональное связывание
- операция объединения с nil
[edit] Принудительное извлечение значения
Принудительное извлечение (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
Принудительное извлечение допустимо при гарантированном наличии значения в опционале.
[edit] Косвенное извлечение значения
Косвенное извлечение опционального значения (implicitly unwrapping):
var a: Double! = 3.14 // знак ? заменяется на ! a + 0.12 // 3.26 type(of: a) // Optional<Double>.Type
Косвенное извлечение допустимо, если в момент проведения операции,
опционал гарантированно содержит значение (не nil).
Далее к параметру можно обращаться без принудительного извлечения, так как оно происходит автоматически.
При этом, принудительное извлечение остается возможным: a + a! + 0.12
Косвенное извлечение может быть полезно при использовании в классе опционального параметра,
значение которого гарантированно инициализируется после создания экземпляра класса.
Это позволяет не использовать принудительное извлечение и опциональное связывание.
[edit] Проверка наличия значения в опционале
Проверка на 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
Назад · Оглавление · Дальше