茶漬けの技術メモ

Golang, Rubyで趣味開発します。テックニュース書いたり。ガジェット触ったり。

Swift3.0 関数呼び出し時は引数名が必要になっている

Swift で関数一つ呼ぶのに苦労した話し - Qiita

Xcode Swiftでの関数 - tetu式

これらの記事を読む限り、ラベルなしの場合は引数名は2つ目以降必要なようですが

func myFunc1(str1: String){
    print("str1 = \(str1)")
}
myFunc1("hoge")  // Missing argument label 'str1:' in call
myFunc1(str1: "hoge")

func myFunc2(str1: String, str2: String){
    print("str1 = \(str1)")
    print("str2 = \(str2)")
}
myFunc2("hoge", str2:"fuga")  // Missing argument label 'str1:' in call
myFunc2(str1:"hoge", str2:"fuga")

1つ目の引数にも引数名が必要なようです。

ラベルありの場合は

func myFunc3(label1 str1: String){
    print("str1 = \(str1)")
}
myFunc3("hoge")  // Missing argument label 'label1:' in call
myFunc3(label1: "hoge")

func myFunc4(label1 str1: String, label2 str2: String){
    print("str1 = \(str1)")
    print("str2 = \(str2)")
}
myFunc4("hoge", label2: "fuga")  // Missing argument label 'label1:' in call
myFunc4(label1:"hoge", label2:"fuga")

こちらも当然、ラベル名を指定する必要があります

ラベル名を指定するのが面倒という場合は

func myFunc4(_ str1: String, label2 str2: String){
    print("str1 = \(str1)")
    print("str2 = \(str2)")
}
myFunc4("hoge", label2: "fuga")

このようにラベルにワイルドカードを使えば実現できるようです。

Swift3.0から、1つ目の引数にも引数名が必要になったみたいです。面倒にも感じるのでワイルドカードが使えるということを頭に入れておいてもいいかもしれない。