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

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
Line 73: Line 73:
 
значение которого гарантированно инициализируется после создания экземпляра класса.<br>
 
значение которого гарантированно инициализируется после создания экземпляра класса.<br>
 
Это позволяет не использовать принудительное извлечение и опциональное связывание.
 
Это позволяет не использовать принудительное извлечение и опциональное связывание.
 +
 +
==Проверка наличия значения в опционале==
 +
 +
Проверка на nil:
 +
<pre>
 +
var a: Int?
 +
var b: Int? = 32
 +
 +
a != nil  // false
 +
b != nil  // true
 +
</pre>
 +
 +
Проверка и принудительное извлечение опционала в условии:
 +
<pre>
 +
var a: Int? = 8
 +
var b = 2
 +
 +
if a != nil {
 +
    b += a!
 +
}
 +
 +
b  // 10
 +
</pre>
 +
 +
Проверка и косвенное извлечение опционала в условии:
 +
<pre>
 +
var a: Int! = 8
 +
var b = 2
 +
 +
if a != nil {
 +
    b += a
 +
}
 +
 +
b  // 10
 +
</pre>
  
  

Revision as of 14:34, 22 May 2022

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


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



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

Personal tools
Namespaces

Variants
Actions
Navigation
Tools