2016-10-14 6 views
2

Swift 3では、デフォルトですべての引数ラベルを関数呼び出しに含める必要があります。しかし、関数が変数(または定数)に代入され、その変数が引数を渡すとき、引数ラベルは必要ではなく、あるいは許可されます。ファンクションが変数に割り当てられているときは、引数は指定できませんか?

例えば、変数に割り当てられた2つのIntパラメータ(int1int2)との機能のためにvarNameと呼ばれる:

varName (1, 5) // will work, but 
varName (int1: 1, int2: 5) //produces an error for extraneous argument labels. 
  1. が私の理解は正しいですか?

  2. ここで引数ラベルを必要としない理由は何ですか? (私はこの上の任意のドキュメントを見つけることができません。)

+3

あなたの質問を証明する完全な例を用いてあなたの質問を更新した場合にそれが役立つだろう。 – rmaddy

+2

私はあなたがこれを読んでみたいと思うと思う:https://github.com/apple/swift-evolution/blob/master/proposals/0111-remove-arg-label-type-significance.md – jtbandes

+0

@jtbandesはい、それ記事は正直に私の質問に答えました。どうもありがとうございます。 –

答えて

1
  1. はい。
  2. SE-0111 - Remove type system significance of function argument labelsを参照してください。

例:

func foo(bar: Int, baz: String) { 
    print(bar, baz) 
} 

foo(bar: 123, baz: "abc") // Valid, prints: 123 abc 

let x = foo //Inferred type: (Int, String) -> Void 
x(123, "abc") // Valid, prints: 123 abc 

let y: (bar: Int, baz: String) -> Void = foo // Invalid 
    // ERROR at line 10, col 9: function types cannot have argument label 'bar'; use '_' instead 
    // let y: (bar: Int, baz: String) -> Void 
    //  ^
    //   _ 
    // ERROR at line 10, col 19: function types cannot have argument label 'baz'; use '_' instead 
    // let y: (bar: Int, baz: String) -> Void 
    //     ^
    //     _ 
y(bar: 123, baz: "abc") // Invalid 
    // ERROR at line 19, col 2: extraneous argument labels 'bar:baz:' in call 
    // y(bar: 123, baz: "abc") // 123 abc 
    // ^~~~~~  ~~~~~ 
関連する問題