Swift: Optional型の変数は比較時に自動的にunwrapされる
String?
のような Optional 型の変数を比較するときには nil かどうか調べたり、明示的に unwrap したりしないといけないのかなと思っていたのだが、実はそうではなかった。
比較演算子を使うと、optional 型の変数が自動的にアンラップ(unwrap)される。
» [Swift] Optional(オプショナル)型についてのまとめ Ver2 – Qiita
ドキュメントのどこに書かれてるか分からなかったが、実際に試してみるとそうなっている。例えば以下のように変数を unwrap せずに比較が可能。
var x: String? x = "hello" // x! でも x? でもなく x でよい if x == "hello" { // これが出力される println("x is hello") } var y: String? // y が nil でもエラーにならない if y == nil { println("y is nil") }
変数 x の値は Optional なので厳密には “hello” という文字列と同じではないのだが、このように比較時にはその値が取り出されて実行される。
注意しないといけないのは、これは String?
のように ?
の場合の話であって、String!
のように書く「Implicitly Unwrapped Optional 型」の場合には当てはまらないということ。
var y: String! // y は nil なのでエラー if y == "hoge" { }
なので Implicitly Unwrapped Optional 型の場合は明示的に nil でないことを確認しないといけない。
var y: String! if y != nil && y == "hoge" { }
コメントを残す