2015-10-28 15 views
1

У меня есть подкласс NSObject. Say CityWalksДоступ к необязательному свойству в нескольких функциях для вычислений - Swift

класс CityWalks { var totalCount: Int? }

Как использовать эту собственность дальше? Должен ли я проверять объединение нил каждый раз при достижении этого значения.

пример:

пусть aObject =

говорят в одном fucntion (function1()), мне нужно, чтобы получить это значение, то он хотел бы (aObject!.totalCount ?? 0)

func function1(){ 
...Some Access code for the object.... 
(aObject!.totalCount ?? 0) 
} 

Аналогичным образом, в любой другой function (function2()), мне придется написать тот же код.

func function2(){ 
...Some Access code for the object.... 
(aObject!.totalCount ?? 0) 
} 

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

+0

Почему вы определяете свойство как дополнительный? –

ответ

0

Если у вас есть значение по умолчанию для этого свойства, просто присвойте этому значению значение по умолчанию.

class YourClass { 
    var totalCount = 0 
} 

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

0

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

Однако, чтобы уточнить, вы должны проверить значение при развертывании необязательного. Иногда можно передать опцию UIElement и т. Д., А затем вам ничего не нужно делать с ними

Есть довольно неплохие способы проверки нулевого значения в необязательных значениях, встроенных в 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

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