【问题标题】:Swift 3 first parameter namesSwift 3 第一个参数名称
【发布时间】:2016-11-15 13:24:03
【问题描述】:

在 Swift 2 中,调用函数时似乎并不总是需要第一个参数名称。现在在 Swift 3 中,调用函数时需要第一个参数名称。例如:

func frobnicate(runcible: String) { 
    print("Frobnicate: \(runcible)") 
}

Swift 2.2 允许通过简单的输入来调用函数:

Frobnicate("Station")

Swift 3 似乎要求我们使用方法的第一个参数名称,例如:

Frobnicate(runcible:"Station")

Swift 3 是针对所有函数和方法还是仅针对某些情况?

【问题讨论】:

    标签: swift swift3


    【解决方案1】:

    是的,这是正确的。 Swift 正在以这种方式修复语言不一致问题(初始化程序总是需要这样做)。

    如果您不想使用外部参数名称,只需将其显式删除即可:

    func frobnicate(_ runcible: String) { 
        print("Frobnicate: \(runcible)") 
    }
    

    你可以在Swift Evolution 0046阅读完整的理由

    【讨论】:

    • 太棒了。现在我知道_ 是什么意思了。谢谢你的进一步解释
    • 问题。如果允许我的话。这仅适用于第一个参数还是所有参数?
    【解决方案2】:

    您可以在 i-Book 中阅读The Swift Programming Language (Swift 3)。您也可以在 WWDC 2016 中查看:What's New in Swift

    在 Swift 3 中,默认情况下,函数使用参数名称作为参数的标签。在参数名称前写一个自定义参数标签,或者写_不使用参数标签。

    fun greet(_ person: String, on day: String) -> String {
        return "Hello \(person), today is \(day)."
    }
    greet("John", on: "Wednesday")
    

    // This also works with Swift 2
    fun addThreeNumber(_ first: Int, _ second: Int, _ third: Int) {
        print(first+second+third)
    }
    addThreeNumber(1, 2, 3)
    

    【讨论】:

    • 不要不尊重这里的任何其他答案,但是,在我的 Swift '旅程'中只有几天,并且来自 Java 和中级 Objective-C 背景,这个答案最好地传达了下划线的用法给我.
    【解决方案3】:

    没错。在 Swift 3.0 中,必须为所有参数(包括第一个参数)编写参数名称。参数名称是函数实现体内部使用的名称。

    func frobnicate(runcible: String) { 
        print("Frobnicate: \(runcible)") 
    }
    

    如果您没有明确指定任何参数标签,则默认情况下,外部参数标签与参数名称相同。参数标签是用于在调用函数时传递参数的标签。如果需要,为了更清楚起见,您还可以显式指定外部参数标签。下面的例子-

    func frobnicate(runcibleExternalLabel runcible: String) { 
        print("Frobnicate: \(runcible)") 
    }
    

    如果您想在调用函数时跳过外部参数标签,只需在参数名称前添加“_”即可。

    func frobnicate(_ runcible: String) { 
        print("Frobnicate: \(runcible)") 
    }
    

    【讨论】:

    • 我了解使用参数标签或设置下划线。但是对我来说可能仍然很有趣:最佳实践是什么,尤其是在开发自己的框架时?
    • 我相信您可以选择最佳方式。也许我可以这样说 - 如果您的参数命名约定是显而易见的且自描述的,您可能不需要外部参数标签。否则,您可以选择指定标签。
    【解决方案4】:

    是的,Swift 3 要求您发送第一个参数标签。

    请参考Swift 3 changes

    【讨论】:

    • @auco,是的,链接已损坏,已更新备忘单
    【解决方案5】:

    您需要参数标签的原因是其他代码可以按任何顺序提供参数。

    没有标签,当你调用函数时,参数是匿名的,你不能确定你是否以错误的顺序提供了它们。

    在参数和代码工具前面放置标签可以更好地捕捉我们人类输入的错误。

    下划线只是应对遗留代码过渡的一种方式;包含隐式第一个参数的方法名称。您应该将迁移添加到代码中的任何下划线更改为显式参数标签。你知道这是有道理的。

    【讨论】:

      猜你喜欢
      • 2015-11-09
      • 2016-04-15
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多