しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift再入門7 − The Swift Programming Languageを読んでみる

この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。

The Swift Programming Language: About Swift

読んだ所

今回はFunctionsという項目を読みました。

The Swift Programming Language: Functions

学んだこと

メソッドの引数

メソッドの第一引数のラベルは省略できます。
第2引数は必要です。

func method(value1: Int, value2: Int) {
    print(value1)
}

method(1, value2: 2)

Initializerでは第一引数のラベルも必要です。

class MyClass {
    init(value: Int) {
        print(value)
    }
}

MyClass(value: 1)

ラベル名を直接指定する事もできます。
その場合、第一引数であってもラベルは省略できなくなります。

func method(label value: Int) {
    print(value)
}

method(label: 1)

第2引数も_を使う事で省略できます。

func method(value1: Int, _ value2: Int) {
    print(value1)
}

method(1, 2)

逆に第一引数を指定させる場合は先ほど記載したようにラベルを指定します。
method(#value1: Int, value2: Int)という書き方もあったようですが、Swift2.0では使えないようです。

func method(value1 value1: Int, value2: Int) {
    print(value1)
}

method(value1: 1, value2: 2)

デフォルト引数

Swiftではメソッドのデフォルト引数を指定できます。

func method(value1: Int, value2: String = "value") {
    print(value1)
    print(value2)
}

method(1)
method(1, value2: "")

デフォルト引数があっても型情報は省略できません。

// これはvalue2の型がないからエラー
func method(value1: Int, value2 = "value") {}

Swiftはラベルがあるので第一引数だけデフォルト引数を付ける事ができます。

func method(value1: Int = 10, value2: String) {
    print(value1)
    print(value2)
}

method(value2: "")
method(1, value2: "")

しかしその状態でラベル名を省略するとエラーになります。

func method(value1: Int = 10, _ value2: String) {
    print(value1)
    print(value2)
}

method("") // これはエラーになる

メソッドを変数として宣言する

メソッドを変数として定義する場合は下のように書きます。

let method: (Int) -> Void = { (int: Int) in print(int) }
method(1)

引数がない場合はVoidと書くこともできますし、省略する事も可能です。

let method: () -> Void = { print(1) }
method()