この記事では「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)
デフォルト引数
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()