Необязательные значения в SwiftUI

Понимать и писать эффективный код SwiftUI с необязательными значениями

Большинство распространенных старых языков программирования использовали простой принцип для описания ситуации, когда переменная не имеет значения, они использовали null. Хотя это простое и быстрое решение — объявить, что что-то не имеет значения, оно вызвало множество ошибок и сбоев, когда программисты не думали, что что-то может быть нулевым.

Более современные языки программирования, такие как Swift, поэтому придумали способ решить эту проблему, введя факультативы. Основная цель дизайна Optional — предоставить средства для обозначения отсутствия значения. Необязательные параметры заставляют разработчиков думать о том, что что-то может быть не установлено, и позволяют им соответствующим образом обрабатывать эти случаи.

Дополнительные значения

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

Предположим, мы хотим отслеживать людей и поэтому создаем структуру человека. Мы можем добавить необязательную переменную job, которая отслеживает текущую работу человека. Дополнительные значения объявляются с использованием символа ?. Например, вот как мы можем объявить переменную job типа String?:

var job: String?

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

print("This person is working at \(job)") 
// will throw an error as we didn't assign a job to this variable yet

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

Развертка необязательных значений

Принудительно развернуть (!)

Принудительное развертывание — это способ развернуть необязательное значение, не проверяя, имеет ли оно значение. Это может быть опасно, потому что если необязательное значение не имеет значения, ваш код рухнет. Чтобы принудительно развернуть необязательное значение, используйте символ восклицательного знака (!) Например, следующий код вылетит, если переменная job не имеет значения:

print("This person is working at \(job!)")

Используйте принудительную развертку только в том случае, если вы уверены, что эта переменная всегда будет иметь значение, или если вы хотите быстро что-то протестировать. Просто не забудьте изменить код после завершения тестирования.

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

Оператор объединения nil (??) — это способ развернуть необязательное значение и предоставить значение по умолчанию, если необязательное значение не имеет значения. Например, следующий код напечатает «Нет», если переменная job не имеет значения:

print(job ?? "None")

Необязательная привязка

Необязательная привязка — это способ развернуть необязательное значение и присвоить его переменной. Если необязательное значение не имеет значения, переменной будет присвоено значение nil. Например, следующий код присвоит значение переменной job переменной userJob, если переменная job имеет значение, и nil, если переменная job не имеет значения:

if let userJob = job {
    print(userJob)
}

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

Заключение

Поначалу необязательные значения могут быть немного сложными в использовании, но они представляют собой мощный инструмент, который может помочь вам написать более надежный и эффективный код.

Спасибо! ❤️

Надеюсь, вам понравилось читать это руководство, и теперь вы понимаете, как писать код с необязательными значениями в SwiftUI! 👍

Если вам понравилась эта история, пожалуйста, и вы хотите узнать больше о SwiftUI, подпишитесь на меня, чтобы узнать больше историй! 😊