КОДЕКС

Необязательная цепочка в Swift

Узнайте, как бороться с nils при доступе к свойствам в Swift

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

Например:

something?.someValue?.someMethod()

Работа с опциями в Swift

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

optional!.value

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

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

something?.someValue?.someMethod()

Пример

Объявим константу optionalText:

let optionalText: String? = "Hi, this is a test."
print("The text says: \(optionalText)")

Выход:

The text says: Optional("Hi, this is a test.")

Давайте тогда возьмем optionalText с заглавной буквы:

print("The text says: \(optionalText.uppercased())")

Ой! Получаем ошибку. Он говорит:

error: value of optional type 'String?' must be unwrapped to refer to member 'uppercased' of wrapped base type 'String'
print("The text says: \(optionalText.uppercased())")

Эта ошибка возникает, когда мы пытаемся вызвать uppercased() для строкового значения, которое может быть nil.

Что мы можем сделать, так это использовать необязательную цепочку, чтобы проверить, является ли optionalText строкой, и только затем вызвать uppercased():

print("The text says: \(optionalText?.uppercased())")

Выход:

The text says: Optional("HI, THIS IS A TEST.")

Оператор вопросительного знака - это необязательный оператор цепочки. Он работает, выполняя все, что находится после вопросительного знака, только если все, что до него, не nil.

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

Наконец, давайте используем nil coalescing, чтобы удалить слово Optional из печати:

print("The text says: \(optionalText?.uppercased() ?? "not available")")

Результат:

The text says: HI, THIS IS A TEST.

Длина дополнительной цепочки

Помните, что вы можете создавать необязательные цепочки сколь угодно долго:

someOptional?.someOtherOptional?.yetAnotherOptional?

Заключение

Необязательная цепочка - удобный способ иметь дело со значениями optionals в Swift. Используя их, вы можете запросить свойства чего-то, что может быть nil.

Вот пример дополнительной цепочки:

something?.someValue?.someMethod()

Спасибо за прочтение. Удачного кодирования!

Убедитесь, что вы подписаны на меня на Medium. Давайте подключимся и к Linkedin.

Стать гением

Тебе понравилась эта статья?

Станьте участником Medium.com, чтобы читать главные новости экспертов в этой области.

Отказ от ответственности: присоединяясь по предоставленной ссылке, я зарабатываю небольшую комиссию без каких-либо дополнительных затрат для вас :)

Вы можете найти что-то интересное