【问题标题】:How to reference multiple unnamed parameters inside a swift function如何在 swift 函数中引用多个未命名参数
【发布时间】:2018-06-10 02:39:04
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,我想我可以。它的投票失败了,所以我想我会根据你的回答强调它实际上是一种很好的技术。
  • 如果您愿意,只需支持/接受他的回答。如果您认为值得澄清为什么这是一个好答案,或者在他的回答下添加一些肯定的评论。或者post your own answer,如果你想添加一些实质性的东西。
  • @RichHoffman 如果我的回答对你有用,你可以接受。

标签: swift function parameters


【解决方案1】:

非常有趣和具有挑战性! 但是,查看 Swift 4 语法(The Swift Programming Language (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-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

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

【讨论】:

  • 是的,它可以让你编译。我将该代码放在操场上并编译。但是,看看 xcoder 的回答,就知道为什么会是现在这样了。
【解决方案2】:

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

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

所以这是一个“不要那样做”的例子。

【讨论】:

    【解决方案3】:

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

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

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

    printMultiple(2, 4)
    

    【讨论】:

      【解决方案4】:

      这些参数称为“忽略参数”,并不意味着被引用。请参阅this answer 了解使用忽略参数的原因。

      来自https://medium.com/swift-programming/facets-of-swift-part-4-functions-3cce9d9bba4,“一个被忽略的参数让我们不必为我们不使用的参数想一个名字,比如当我们重写一个方法而不使用给定的参数时,或者实现一个闭包并且不要使用给定的参数。"

      【讨论】:

        猜你喜欢
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        • 2016-03-20
        • 1970-01-01
        • 2016-07-26
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多