Optionalな値をswitchする

March 06, 2016

あぁ、今までこれ使ってなかった。Optionalはswitchできないと思ってguardとかで一旦中身を取り出していました。caseに?をつけることでswitchできたんですね。

例です。

ちょっとわかりづらいんですが、この例ではnumberはnが2000より大きい場合nilになります。

let n = Int(arc4random\_uniform(3000))
let number: Int? = n > 2000 ? nil : n

switch number {
case 0?:
    print("Zero")
case (1..<1000)?:
    print("Number is less than 1000")
case .Some(let x):
    print("Number is \\(x)")
case .None:
    print("None")
}

こうすることで、nilの場合は「None」が出力されて、値がある場合はその値が「Number is 値」という形で出力されて、0以上、1000以下の場合はそれぞれのケースに入ってきます。まぁ、.Someでwhereを書いても良いかも。

Functional Swift を読んでいる中で出てきました。


Profile picture

Written by morizotter who lives and works in Tokyo building useful things. You should follow them on Twitter