如何在swift函数中引用多个未命名参数

时间:2017-12-29 17:34:23

标签: swift function parameters

我知道这不是一件好事,但我非常好奇这是如何运作的。

我可以创建这样的函数并调用它,但我没有看到如何引用参数

func printMultipleOf_v2(_ : Int, _ : Int) {
   //how to reference parameters?  
}
printMultipleOf_v2(2, 4)

4 个答案:

答案 0 :(得分:2)

参数称为“忽略参数”,不应引用。有关使用忽略参数的原因,请参阅this answer

https://medium.com/swift-programming/facets-of-swift-part-4-functions-3cce9d9bba4开始,“一个被忽略的参数让我们不必为我们不使用的参数找到一个名称,就像我们覆盖一个方法并且不使用给定的参数或者实现一个闭包,不要使用给定的参数。“

答案 1 :(得分:1)

如果您打算使用这些参数,只需指定_的参数标签,然后指定实际参数名称:

func printMultiple(_ x: Int, _ y: Int) {
    // now use x and y
}

因此,虽然您仍然可以在函数内引用xy(或其他),但调用点不需要任何标签:

printMultiple(2, 4)

答案 2 :(得分:0)

非常有趣且具有挑战性! 但是,看看Swift 4语法(Swift编程语言(Swift 4)),不应该授权:

parameter → external-parameter-nameoptlocal-parameter-nametype-annotation
parameter → external-parameter-nameoptlocal-parameter-nametype-annotation...
external-parameter-name → identifier
local-parameter-name → identifier

其中identifier必须具有此处定义的identifier_head

identifier → identifier-headidentifier-charactersopt
identifier → `identifier-headidentifier-charactersopt`
identifier → implicit-parameter-name
identifier-list → identifier  identifier,identifier-list
identifier-head → Upper- or lowercase letter A through Z
identifier-head → _
identifier-head → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA
identifier-head → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, or U+00F8–U+00FF
identifier-head → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, or U+180F–U+1DBF
identifier-head → U+1E00–U+1FFF

因此,在这种情况下,您根本无法引用参数:_不是外部名称,而是内部名称。

答案 3 :(得分:0)

答案是,你不能。通过声明这样的参数,您明确告诉编译器忽略它们。如果您需要引用它们,请给它们一个内部名称:

func printMultipleOf_v2(_ lhs: Int, _ rhs: Int) {
    //how to reference parameters?
    print(lhs, rhs)
}

所以这是"不要这样做。"