10. 早期 Exit を保証
guard
guard value != 0 else {
// ここでスコープを抜けるコードを書かないとエラー
}
'guard' body may not fall through, consider
using 'return' or 'break' to exit the scope
▶ return
▶ break
▶ continue
▶ fatalError
23. スコープ内の変数は使えない
repeat-while
let value = 100
repeat {
// while 条件式はスコープの外
let condition = array.contains(value)
} while condition // repeat 内の変数は使えない
Use of unresolved identifier 'condition'
56. if 文に where で条件を添える
条件指定
// Swift 1.2 でも使えた記載方法
if let string = optionalString
where string.hasSuffix(".png") {
}
57. パターンマッチとの併用も可能
条件指定
// 列挙子から値を抽出して条件判定
if case let .OSX(version) = platform
where version > 10.10 {
}
// 複数のオプショナルを展開して条件判定
if case let (a?, b?, c?)
= (optionalA, optionalB, optionalC)
where a + b == c {
}
58. guard でも使える
条件指定
// 列挙子から値を抽出して条件判定
guard case let .OSX(version) = platform
where version > 10.10 else {
}
// 複数のオプショナルを展開して条件判定
guard case let (a?, b?, c?)
= (optionalA, optionalB, optionalC)
where a + b == c else {
}
59. for でも使える
条件指定
// nil 以外の要素で繰り返し
let optionals:[Int?]
for case let value? in optionals {
}
▶ ループの中で判定しなくて良い
▶ fratMap { $0 } でループさせなくて良い
60. for でも使える
条件指定
// nil 以外の繰り返しに条件まで付けられる
let optionals:[Int?]
for case let value? in optionals
where value > 0 {
}
▶ 該当した要素だけが繰り返しの対象に