LoginSignup
55
53

More than 5 years have passed since last update.

Swift2.0で追加された構文

Last updated at Posted at 2015-06-10

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

参照

iBooks The Swift Programming Language (Swift 2 Prerelease)

55
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
53