##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!)
}
間違ってたらご指摘お願いします。