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

Swiftのif文でwhereを使ったときのelseの条件

※ Swiftバージョン1.2の頃の話なのでコメント欄もご参照ください:bow:

Whereを使ったときのelseの条件

Swift1.2からif文でwhereが使えるようになりました。
これによってネストせずにOptionalな変数をアンラップしてから中身を判定することができます。
ただ、その場合にelse句はアンラップして中身がなかった場合なのか、whereの判定がfalseになったからなのか疑問だったので調べてみました。

func test(token: String?) {
    if let t = token where t.isEmpty {
        println("token is empty")
    } else {
        println("token is nil or not empty")
    }
}

// 結果
test("")    // -> token is empty
test("xxx") // -> token is nil or not empty
test(nil)   // -> token is nil or not empty

結果は、アンラップして中身がなかった場合とwhereの判定がfalseになった場合どちらもelseに入りました。(当たり前か)

全部場合分けするには

全て場合分けしたい場合は以下のように書けますが余計分かりにくい。。

func test(token: String?) {
    if let t = token where t.isEmpty {
        println("token is empty")
    } else if token == nil {
        println("token is nil")
    } else {
        println("token is not empty")
    }
}

素直に入れ子にしたほうがよさそうです。

func test(token: String?) {
    if let t = token {
        if t.isEmpty {
            println("token is empty")
        } else {
            println("token is not empty")
        }
    } else {
        println("token is nil")
    }
}

switch文でやる(追記)

@Ushio@github さんからコメントで教えていただきました。
Switch文できれいに場合分けできてこれが一番見やすいですね!

func test(token: String?) {
    switch token {
    case let .Some(value) where value.isEmpty:
        println("token is Empty")
    case let .Some(value):
        println("token is Not Empty")
    case .None:
        println("token is nil")
    }
}

test("")
test("token")
test(nil)

/*
token is Empty
token is Not Empty
token is nil
*/
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
ユーザーは見つかりませんでした