Swift. Извлечение опционального значения

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
 
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



Назад · Оглавление · Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools