Доступ к необязательному свойству в нескольких функциях для расчетов - Swift
У меня есть подкласс NSObject. Скажи CityWalks
класс CityWalks{ var totalCount:Int? }
Как я могу использовать это свойство дальше? Должен ли я проверять нулевое слияние каждый раз, когда к этому значению обращаются.
пример:
let aObject =
скажем, в одной функции (function1()), мне нужно получить доступ к этому значению, то он хотел бы (aObject!.totalCount ?? 0)
func function1(){
...Some Access code for the object....
(aObject!.totalCount ?? 0)
}
Точно так же в любой другой функции (function2()) мне придется написать один и тот же код.
func function2(){
...Some Access code for the object....
(aObject!.totalCount ?? 0)
}
Итак, что может быть лучшим подходом для такого поля, учитывая, что это свойство может получать значение с сервера или нет.
2 ответа
Если у вас есть значение по умолчанию для этого свойства, просто назначьте это значение как значение по умолчанию.
class YourClass {
var totalCount = 0
}
Я бы порекомендовал вам избегать использования дополнительного значения, если это возможно. Поскольку необязательные значения это первое место, когда вы можете получить ошибку.
Как указано в комментариях и другой ответ с использованием необязательных не совсем оптимальным в вашем случае. Похоже, вы могли бы также использовать значение по умолчанию 0.
Однако, чтобы уточнить, вы должны проверить значение при развертывании необязательного. Иногда можно передать необязательный элемент в UIElement и т. Д., И тогда вам не нужно ничего делать с ними
Существуют красивые способы проверки nil в необязательных значениях, встроенных в swift, так что вы можете создавать довольно аккуратный код, даже если вы работаете с необязательными.
Заглянуть в guard let
а также if let
если вы хотите узнать больше о развертывании значений безопасно.
если позволить
if let totalWalks = aObject?.totalCount {
//operate on totalWalks
}
охрана
guard let totalWalks = aObject?.totalCount else { return }
//operate on totalWalks
Есть также случаи, когда вы захотите вызвать функцию с необязательным значением, и в этом случае вы можете сделать это с ?
aObject?.doSomething()
Любые возвращаемые значения, которые может иметь эта функция, теперь будут заключены в необязательные значения, и вам, возможно, придется развернуть их также с помощью if let
или же guard
При работе с опциями вы должны стараться не заставлять распаковывать !
как будто вы на данный момент знаете, что значение не является нулевым, что может после изменения в коде больше не быть истинным.