Help us understand the problem. What is going on with this article?

Swiftのnil判定

More than 5 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!) 
}

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

reoy
swiftとobjcをメインで使っています。最近はもはやswiftが殆ど。Ruby on Railsも頑張ってます!
recruitmp
結婚・カーライフ・進学の情報サイトや『スタディサプリ』などの学びを支援するサービスなど、ライフイベント領域に関わるサービスを提供するリクルートグループの中核企業
http://www.recruit-mp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした