Swift. Опциональный тип данных
Назад · Оглавление · Дальше
Введение
Опционал - особый тип данных, позволяющий параметру определенного типа не иметь значения.
Пример 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") // 1 let d = Int("1.5") // nil type(of: a) // Int.Type type(of: b) // Int.Type type(of: c) // Optional<Int>.Type type(of: d) // 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
Назад · Оглавление · Дальше