対象: 関数(Swift)関数はfuncキーワードで宣言することができる。引数も戻り値もない関数は以下のように宣言する。 // 引数なし、戻り値なし関数 func withNoParams() { print("引数なし") } withNoParams() 関数に引数、及び戻り値がある場合、それぞれ型を書かなければならない。戻り値の型は、引数の閉じカッコの後に-> 型名のように書く。 Swiftの関数では、引数名が自動的に引数ラベルとなる。引数ラベルは、関数呼び出しの際に引数毎に付することが必要だが、省略することも可能(後述)である。 // 引数あり、戻り値あり関数 func withParamAndRetVal(num: Int) -> Int { return num * 2 } // 関数呼び出しの際に引数ラベルnum:が必要。 print("戻り値 = \(withParamAndRetVal(num: 2))") ただし、引数ラベル付きだからと言って、関数呼び出し時に引数の順序を変更できるわけではない。従って、Swiftの引数ラベルはコードの可読性を上げることが主な目的のようだ。また、関数呼び出し時に引数そのものを省略可能にすることもできる。引数を省略可能にするには、型の後に=で省略値を記述する。以下の例で言えば、関数呼び出し時にcolor引数を省略するとその値は"Silver"となる。 // 引数あり、一部パラメータ省略可能 func withArgLabels(type: String, model: String, color: String = "Silver") -> String { return "\(type) \(model) \(color)" } // 関数呼び出し時に引数ラベルが必須 print(withArgLabels(type: "iPhone", model: "5s", color: "Gold")) // color引数を省略 print(withArgLabels(type: "iPhone", model: "5")) // 引数ラベルなしでは呼び出せない // print(withArgLabels("iPhone", "6", "Black")) // 引数ラベル付きとは言え、順序を変えられるわけではない // print(withArgLabels(color: "Space gray", model: "5", type: "iPhone")) これまでは引数名と引数ラベルが同一の場合だが、異なる名前にすることもできる。その場合は引数名の前に引数ラベルを書く。以下の例では、引数名"v1"に対して引数ラベル"value"を付している。 // 引数ラベル(≠引数名)あり func withDiffArgLabels(value v1: Int) -> String { return "valueは\(v1)です。" } この関数を呼び出すときには、引数ラベル"value"で値100を渡す。しかし、withMismatchedArgLabels関数内ではこれを"v1"という引数名で扱っている。 print(withDiffArgLabels(value: 100)) 関数呼び出し時に引数ラベルを省略したい場合、その引数名の前に"_"を書けば良い。 // 引数の前に"_"を書いて引数ラベルを付さない func color2(_ red: Double, _ green: Double, _ blue: Double) -> String { return "\(red) \(green) \(blue)" } // 引数ラベルを省略して関数呼出し print(color2(127, 127, 127)) 複数の戻り値にも対応している。戻り値は型の指定に加えて、それぞれに名前を付けることができ、呼び出し元ではこの名前でアクセスできる。以下は受け取った文字列の最初の文字と最後の文字の2つの戻り値を返す関数の例である。 // 複数の戻り値 func firstAndLast(str: String) -> (first: Character, last: Character) { return (str[str.startIndex], str[str.index(before: str.endIndex)]) } 関数の戻り値は一旦変数に格納し、それを通して最初の文字であるfirstと最後の文字であるlastにアクセスしている。 // 戻り値には関数宣言で付けた名前でアクセスできる var result = firstAndLast(str: "Swift") print("first: \(result.first) last: \(result.last)") (2015/02/16) () Swift 3.0対応。
Copyright© 2004-2019 モバイル開発系(K) All rights reserved.
[Home]
|