0Pricing
Swift Academy · Урок

Опциональные значения

Опциональные значения

«Опциональные значения» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 1. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 1 уроков всего.

Введение

Здравствуйте,

Опциональная переменная может не иметь значения.

Если переменная опционального типа содержит значение, оно извлекается из опционала и используется. В противном случае значения нет.

Использование опционалов для многих типов в Swift

Это можно сравнить с nil-указателем в Obj-C. Однако nil-указатель допустим только для объектных типов.

Опционалы в Swift используются не только для объектных типов, но и для структур, перечислений и простых типов.

var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable 
automatically takes the value of nil.
*/

nil в Swift и nil в Obj-C — это не одно и то же

nil в Swift и nil в Obj-C — это не одно и то же.

Указатель nil в Obj-C указывает на отсутствие объекта. В Swift nil не является указателем. В Swift nil означает отсутствие данных и поддерживается не только для объектных типов, но и для других типов.

Принудительное извлечение значения

Доступ к переменным, определённым как опциональные, можно получить с помощью принудительного извлечения значения.

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

Если при принудительном извлечении ссылочное значение недоступно, возникает ошибка времени выполнения.

let convertedNumber : Int? = 123
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."

Доступ к опционалу с помощью связывания опционала

Доступ к опционалу с помощью связывания опционала

С помощью блока if let можно получить значение опциональной переменной, присвоив его константе или переменной.

Использовать этот способ вместо принудительного извлечения элегантнее.

var possibleNumber : String? = "10"

if let actualNumber = possibleNumber {
    print(actualNumber)
}

Пример

if let firstNumber = Int("4"), let secondNumber = Int("42"), 
  firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
 If at least one of them is false,
 it will not be entered in the if blog.
*/

Неявно извлекаемые опционалы

Неявно извлекаемые опционалы

В некоторых случаях опциональному значению сначала присваивается значение, и в дальнейшем оно гарантированно не равно nil.

В таких случаях вместо опционала (?) его записывают с оператором (!), указывая, что это значение точно не равно nil. 

Такая форма определения называется «неявно извлекаемым опционалом».

Неявно извлекаемый опционал

Неявно извлекаемый опционал

Чаще всего это используется на этапе инициализации класса.

В отличие от обычных опционалов, переменные, неявно объявленные как извлекаемые, не нужно извлекать вручную.

let possibleString: String? = "An optional string."
 // requires an exclamation mark
let forcedString: String = possibleString!

let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString 

Пример

Если присвоить nil переменным этого типа, возникнут ошибки времени выполнения.

Рассмотрим пример

/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional 
in the same way we use classic optional.
*/

var assumedString: String! = nil

if let definiteString = assumedString {
    print(definiteString)
}
// Prints "An implicitly unwrapped optional string."

Предупреждение

Если переменная потенциально может иметь значение nil, неявно извлекаемый опционал использовать не следует.

Оператор объединения с нулевым значением

Оператор объединения с нулевым значением

Он упрощает раскрытие необязательных типов.

Давайте рассмотрим его на примере.

let defaultColorName = "red"
 // defaults to nil
var userDefinedColorName: String?  

var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil, 
so colorNameToUse is set to the default of "red"
*/


// a != nil ? a! : b 
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn, 
otherwise it returns the default value, ie b.
*/

Поздравляем

Поздравляем 🎉

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

До встречи на следующем уроке 🥳

Опциональные значения — иллюстрация 12

Часто задаваемые вопросы

Урок «Опциональные значения» бесплатный?

Да — полный текст урока «Опциональные значения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 1 уроков всего.

Чему я научусь в уроке «Опциональные значения»?

Опциональные значения Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 1.

Сколько времени занимает урок «Опциональные значения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

← Назад к Swift Academy