Google+ Followers

2014年12月22日月曜日

Swift:オプショナル型「!、?」とnil coalescing operator「??」

Swiftコードで見かけて困惑しました。
なんだ、このビックリマークは!
例えば「Int!」「Int?」とかいうキーワード。

なんだこれ??

「??」も含めてまとめてみます。


  • 「?」はオプショナル(Optional)型
  • 「!」は暗黙的開示オプショナル(Implicitly Unwrapped Optional)型
  • 「??」はnil併合演算子(nil coalescing operator)
変数宣言時に使う?と!。
Playgroundで確認してみると怒られているのはInt!にnilを代入しようとする時だけです。

なぜだろうか。

var a: Int? = 10
この宣言は
var a: Optional<Int> = 10
と同等です。
nilが入る可能性があるよという意味らしい。
Intという整数型の値がOptional<>にラッピングされてる!

だから、使うときはラッピングを解いてあげないといけません。
var d = a! - 1
こんな感じです。この作業をアンラッピング(開示)というらしいです。

いちいち面倒くさい!!
暗黙的にやってくれよ!というのが「!」です。
var a: Int! = 10
そうすると、
var d = a - 1
とできます。
var d = a! - 1
としてもエラーは起きないようです。


ちなみに?と!どちらも宣言時はnilが入ってるようです。

?にはOptional Chainingというもう一つ意味があるらしい。
※これはまた今度調べよう。

それよりも「??」が気になる。
ほかの言語でもよく見かける三項演算子の形
var a: Int? = 10
と宣言されているとnilの可能性があるので
var b = a != nil ? a! : 0
というようにnilかどうかチェックするのに便利なのが三項演算子
めんどーーーい!!
var b = a ?? 0
とかけるよ!

以下のサイト(http://qiita.com/cotrpepe/items/518c4476ca957a42f5f1)と書籍を参考にしています。

0 件のコメント:

コメントを投稿