Swift 3的第一个参数名称

时间:2016-07-13 05:44:43

标签: swift swift3

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

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

Swift 2.2只需输入以下内容即可调用该函数:

Frobnicate("Station")

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

Frobnicate(runcible:"Station")

Swift 3适用于所有功能和方法,还是只适用于某些情况?

5 个答案:

答案 0 :(得分:32)

是的,这是对的。 Swift正在以这种方式解决语言不一致问题(初始化程序始终需要这样做)。

如果您不想使用外部参数名称,请将其明确删除:

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

您可以在Swift Evolution 0046

中阅读完整的理由

答案 1 :(得分:16)

您可以在i-Book中阅读The Swift Programming Language (Swift 3)。您也可以在2016年WWDC中查看: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)

答案 2 :(得分:9)

完全。在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)") 
}

答案 3 :(得分:2)

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

请参阅Swift 3 changes

答案 4 :(得分:0)

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

如果没有标签,当您调用该函数时,参数是匿名的,如果您以错误的顺序提供它们,则无法确定。

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

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