Swift. Опциональный тип данных

From AsIsWiki
Revision as of 18:51, 14 April 2022 by Alex (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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


Введение

Опционал - особый тип данных, позволяющий параметру определенного типа не иметь значения.

Пример 1

В коде есть сущность, описывающая точку на плоскости: (x, y)
Точка выведена на плоскость: (2, 3)
Точка удалена с плоскости: (nil, nil)

Пример 2

В коде есть сущность, описывающая пользователя: (name, age, job)
Новый пользователь добавляется в систему: ("Иван", 32, nil)
nil - сведения о работе отсутствуют

Опционал исключает неоднозначность: если значения нет,
то оно не сравнивается с нулем или пустой строкой, его просто нет.

Конвертирование строки в число:

let a = "1945"
let b = Int(a)  // 1945

let m = "Одна тысяча сто десять"
let n = Int(m)  // nil

Int() возвращает значение опционального типа. Константы b и n являются опционалами.

nil - указывает на отсутствие значения в хранилище опционального типа.

Целочисленный тип и опциональный целочисленный тип - два разных типа данных:

let a = 1
let b = Int("1")

type(of: a)  // Int.Type
type(of: b)  // Optional<Int>.Type

Значение типа Optional<Int> - это целое число или nil.

Опциональные типы данных всегда строятся на основе базовых неопциональных:
Bool, String, Float, Double, кортежи, коллекции, пользовательские типы и т.д.

Int(_:) возвращает опционал, только если функции передано не числовое значение:

let a = Int(1)      // 1
let b = Int(1.5)    // 1
let c = Int("1.5")  // nil

type(of: a)  // Int.Type
type(of: b)  // Int.Type
type(of: c)  // Optional<Int>.Type

Формы записи опционального типа данных:

Optional<T> - полная форма
T?          - краткая форма

T: Any - тип данных на котором основан опционал

При объявлении опционала, необходимо явно указать его базовый тип:

var a: Optional<Character> = "a"

var b: Character? = "b"

var x: Int? = 12

В любой точке кода, опциональному параметру можно присвоить nil:

var x: Int? = 12

x = nil  // значение переменной уничтожено

При объявлении, опционалу присваивается nil:

var x: Int?  // nil - значение по умолчанию

Создание опционала с помощью функции Optional:

var a = Optional("Иван")  // "Иван"

a = nil  // nil

type(of: a)  // Optional<String>.Type

Опционал был создан с базовым типом String.

После удаления значения, тип опционала сохраняется.

Опционалы в кортежах

Опциональный кортеж:

var tuple: (code: Int, message: String)?  // nil

tuple = (404, "Page not found")  // (code 404, message "Page not found")

Опциональные элементы в кортеже:

var tuple: (Int?, Int) = (nil, 100)

tuple.0  // nil
tuple.1  // 100

Xcode Version 12.4 (12D4e)

Ошибка среды:

var a: Optional<Int>
var b: Int?

b  // nil
a  // 0 - очевидно ошибка playground

Решение:

var a: Optional<Int> = nil  // необходима принудительная инициализация
var b: Int?

b  // nil
a  // nil



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

Personal tools
Namespaces

Variants
Actions
Navigation
Tools