Bondのソースコードを眺めていたら??(ダブルクエッションマーク)が目に入り、頭も??になりました。BondオリジナルのSugar Sytaxかと思いきや、実はこれSwiftオリジナルのオペレーターで、Nil Coalescing Operatorと呼ぶことがわかりました。
簡単な例
使い方はいたってシンプル。
Optionalに対して、a != nil ? b! : c
を評価し、aがnilでなければbを強制アンラップし、aがnilであればcを返します。
var maybeInts: [Int]? // nil
maybeInts != nil ? maybeInts! : [] // []
maybeInts ?? [] // []
もしintが入ったらこうなる。
maybeInts = [10,20,30]
maybeInts ?? [] // [10,20,30]
maybeInts != nil ? maybeInts! : [] // [10,20,30]
注意すべき点は型を揃える必要があるところです。
maybeInts = [10,20,30]
let wrong = maybeInts ?? [10.0] // error
let correct = maybeInts ?? [1,2,3] // ok
実際の使いどころ
一つの例としてオプショナル型配列と使うと、かなりすっきりします。
Before
if let maybeInts = maybeInts {
for x in maybeInts {
let doubled = x * 2
print(doubled)
}
}
After
for x in maybeInts ?? [] {
let doubled = x * 2
print(doubled)
}
これなら早速、明日からでも使えますね。