2015-12-29 4 views
1

Я использую оболочку для ключей, написанную в Swift. Когда значение равно nil, эта оболочка, которую я использую, автоматически сохраняет данные как «nil» вместо сохранения в качестве фактического значения nil.замена значения nil другим настраиваемым значением

For ex, ["last_name" : "nil"]. 

В одном из моих ярлыков в приложении iOS я возвращаю значение last_name. Меня беспокоит, что текст в ярлыке говорит «ноль», когда не должно быть ничего.

Я помню в Swift, что есть синтаксис, такой как A ?? B, который помещает B вместо этого, если A недействителен. Но я не могу вспомнить это прямо сейчас. В моем приложении, я хочу что-то, как показано ниже:

if the value I'm looking for is nil, then input "" instead of "nil" 
If keychain["last_name"] == nil ?? "" 

Я знаю, что это ужасное объяснение, но это все, что я мог придумать.

ответ

2

?? является nil coalescing operator. Он используется для разворачивания опций - a ?? b является сокращением на a != nil ? a! : b.

Возможно, вы, скорее всего, захотите использовать тернарный оператор. Можно даже комбинировать их так:

let lastName = keychain["last_name"] == "nil" ? "" : (keychain["last_name"] ?? "") 

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

var keychain = ["first_name" : "aaron", "last_name" : "nil"] 

keychain.forEach { if $0.1 == "nil" { keychain.removeValueForKey($0.0) } } 

print(keychain) //["first_name": "aaron"] 

$0 является стенографический аргумент name. Вот длинная форма того же кода:

keychain.forEach { (key, value) ->() in 
    if value == "nil" { 
     keychain.removeValueForKey(key) 
    } 
} 
+0

Огромное вам спасибо! Решил это :) Один быстрый вопрос. Не возражаете ли вы дать мне дополнительные объяснения по $ 0,1? Это вызовет проблему, если я сделаю $ 0.0? – Kahsn

+1

'$ 0' - это пара ключ-значение, переданная в' 'forEach'. '$ 0.0' представляет ключ (например,' first_name'), а '$ 0.1' - значение (например,' aaron'). –

+0

Большое спасибо Aaron :) Было бы здорово, если бы вы могли сказать мне, как называется этот синтаксис, поэтому я могу найти его в документе Apple. – Kahsn

Смежные вопросы