なんだ、このビックリマークは!
例えば「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)と書籍を参考にしています。
以下のサイト(http://qiita.com/cotrpepe/items/518c4476ca957a42f5f1)と書籍を参考にしています。