2016-10-14 38 views
2

Swift 3要求所有參數標籤默認包含在函數調用中。然而,當一個函數被分配給一個變量(或常量),並且該變量傳遞參數時,不需要參數標籤 - 甚至是允許的。將函數分配給變量時,不允許使用Swift參數?

例如,對於分配給一個變量兩個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 
    // ^~~~~~  ~~~~~ 
相關問題