対象:
Swift3

関数(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)
(2016/10/27 更新) Swift 3.0対応。

新着情報
【iOS Objective-C, Swift Tips】画像の向きを指定して保存する(Swift)
【iOS Objective-C, Swift Tips】UIImagePickerControllerの表示を日本語にする(Swift)
【iOS Objective-C, Swift Tips】ウィンドウの階層構造を3D表示する(Swift)

Copyright(C) 2004-2016 モバイル開発系(K) All rights reserved.
[Home]