iOS
Swift

Swiftのnil判定

More than 3 years have passed since last update.


nilとOptional

SwiftにはOptionalという概念が存在し、変数がnilを許容出来るかどうかを設定することができる。

var hoge:String? = nil   //OK

var hoge = nil //error
var hoge:String = nil // error

具体的な設定方法としては変数の型に?を付けるか、as? Stringの様にキャスト時に設定することが出来ます。

なのでOptionalとして宣言した変数に関してはnilになる可能性があるため、引数がOptionalを許容しない場合(引数にhogeを利用したい場合など)はnilの判定が必要になります。


nil判定に関して


Optionalでnil判定が必要な場合とそうでない場合

呼び出し元のオブジェクトがOptional型の場合わざわざnil判定を行う必要はありません。以下の場合など。

hoge?.action()

この場合hogeがnilだった場合はaction()は実行されず、この行は無視されます。

また、返り値が存在するメソッドの場合は、nilが返り値と鳴ります。

一方で、Optionalが許容されない場合はnil判定を行う必要があるため、以下の手法でhogeがnilかどうかを判定します。


ObjCでのnil判定

ObjCのnil判定は非常にシンプルです

UIView* hoge = [UIView alloc]init];

if (hoge) {
[self addSubView:hoge];
}

if (hoge != nil) {
[self addSubView:hoge];
}


Swiftでのnil判定

一方でSwiftではif let構文を利用し、hogeがhogehogeに代入出来た場合のみifスコープに突入します。

let hoge = UIView()

if let hogehoge = hoge { // if let hoge = hogeでも可
self.addSubView(hogehoge) //OK
}

if hoge != nil {
self.addSubView(hoge!) //OK
}

//この書き方はswiftでは出来ない
if hoge {
self.addSubView(hoge!)
}

間違ってたらご指摘お願いします。