guard
条件分岐の構文。
if
と似ているが、guard
は必ずelse
とセットで使う。
if
だとunwrappedNameはif
のブロック内でしか使えない。
func greet(name: String?) {
guard let unwrappedName = name else {
return
}
print("Hi \(unwrappedName)")
}
// ifで書くと
func greet(name: String?) {
if let unwrappedName = name {
print("Hi \(unwrappedName)")
}else {
return
}
}
greet("Jhon") // "Hi John"
greet(nil) // 何も表示されない。
defer
defer
ブロック内の処理はスコープを抜ける際に実行される。
例のように複数のdefer
を定義すると後ろから順に実行される。
func f() {
defer { print("First") }
defer { print("Second") }
defer { print("Third") }
print("call f()")
}
call f()
Third
Second
First
ファイルを閉じるなど後処理に使える。
Availability
OSのバージョンによる分岐。
if #available(iOS 9, OSX 10.10, *) {
// iOS9以降、OSX10.10以降
}else {
}
構文は以下のようになる。
if #available(`platform name` `version`, ..., *) {
// iOS9以降、OSX10.10以降
}else {
}
最後の*
は必須で、これが無いと、Must handle potential future platforms with *
というエラーを吐くので、*
はそれ以降を表している?
指定できるプラットフォームはiOS
,OSX
,watchOS
Repeat-While
いわゆるdo-while
構文。
let loopTimes = 5
var loopCounter = 0
repeat {
print(loopCounter)
loopCounter++
} while loopCounter <= loopTimes
0
1
2
3
4
5