関数の宣言
関数は次のような構文で宣言されます。
func 関数名 (引数) -> 返り値の型 { 文 return 返り値 }
返り値がVoid(その実体は空タプル()のシンタックスシュガー)のときは、返り値を省略して次のように書くこともできます。
func 関数名 (引数) { 文 //returnを省ける }
シンタックスシュガー(構文糖衣)とは、構文の読み書きを簡単にするために提供される略記法のことです。内部では、すでに定義されたもともとの構文に置き換えられます。
関数を定義する例を見てみましょう。UIntは非負整数型を表します。
func makeStrLower(str: String) -> String { return str.lowercaseString; } var lowerStr = makeStrLower("Hello, World!") // hello, world! func multiprint(content: String, times: UInt) { for _ in 1...times { print(content) } } multiprint("Good!! ", 10) // Good!! Good!! Good!! Good!! Good!! Good!! Good!! Good!! Good!! Good!!
multiprint関数内にあるfor文の「_」はワイルドカードと呼ばれ、代入の際、今後その値を使わないことを明示するための記法です。例えば、このfor文の中では何回printを行うかにのみ関心があり、レンジから取得できる個々の値は使わないため、ワイルドカードにレンジの値を代入しています。
Objecive-Cにはない特徴として、複数の数をタプルにくるんで呼び出し元へ返せることが挙げられます。
func countwhite(str: String) -> (charCount: Int, whiteCount: Int) { var charCount = 0, whiteCount = 0 for char in str { if char == " " || char == "\t" { whiteCount++ } charCount++ } return (charCount, whiteCount) } countwhite("If you want to make enemies, try to change something.") // (53, 9)
このcountwhite関数は、引数として文字列を与えると、返り値として1つのタプルを返します。タプルの1つ目の要素にはIntとして文字総数が、2つ目の要素にはIntとしてスペース・タブ文字の総数が入っています。