🕊

[Swift] 関数の引数としてタプルを設定した場合の挙動

2021/12/25に公開

はじめに

関数の引数としてタプルを設定した場合の挙動をまとめました。(Xocde:12.5.1)
コードを見れば何がやりたいかわかると思います🙇‍♂️

タプル内の変数宣言なし

タプル内の変数宣言なしの場合はタプルのインデックスでアクセス可能です。

func funcA(ints: (Int, Int)) {
    // indexでのアクセス
    print(ints.0) 
    print(ints.1)
}

funcA(ints: (1, 2))
// 1
// 2

タプル内の変数宣言あり

タプル内の変数宣言ありの場合はタプルのインデックスでも、変数でもどちらでもアクセス可能です。

func funcB(ints: (a: Int, b: Int)) {
    // a,bでのアクセス ← 安全にアクセスできるのでおすすめ!!
    print(ints.a)
    print(ints.b)
    
    // indexでのアクセス
    print(ints.0)
    print(ints.1)
}

funcB(ints: (a: 1, b: 2))
// 1
// 2
// 1
// 2

タプル内の変数宣言あり かつ 実行時に引数を省略する (エラーになる)

エラーになるので関数を宣言できません。理由は不明です。Apple さん、対応してください。

func funcC(ints: (_ a: Int, _ b: Int)) {} // なぜか引数としての変数を省略できないのでエラーになる

もちろんこれはできます↓

// もちろんこれはできる
func funcD(_ a: Int, _ b: Int) {
    // a,bでのアクセス
    print(a)
    print(b)
    
    // indexでのアクセス ← これはできない!!
    // print(0) // 0 ← 当たり前であるが 0 がプリントされるので注意
    // print(1) // 1 ← 当たり前であるが 1 がプリントされるので注意
}

funcD(1, 2)
// 1
// 2

さいごに

関数の引数としてタプルを設定する場合も変数を設定できます!

GitHubで編集を提案

Discussion