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

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
(Created page with "<div style='max-width:700px;text-align:justify;'> Назад · Оглавление · [[Swift. ?|Дальш...")
 
Line 20: Line 20:
 
* опциональное связывание
 
* опциональное связывание
 
* операция объединения с nil
 
* операция объединения с nil
 +
  
 
==Принудительное извлечение значения==
 
==Принудительное извлечение значения==

Revision as of 14:23, 22 May 2022

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


Опционал и базовый тип

Нельзя проводить прямые операции между значениями опционального и базового типов:

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

Косвенное извлечение может быть полезно при использовании в классе опционального параметра,
значение которого гарантированно инициализируется после создания экземпляра класса.
Это позволяет не использовать принудительное извлечение и опциональное связывание.



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

Personal tools
Namespaces

Variants
Actions
Navigation
Tools