あぁ、今までこれ使ってなかった。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 を読んでいる中で出てきました。