根据手册:
功能参数名称
这些参数名称仅在函数本体中使用,在调用函数时不能使用。这些参数名称称为本地参数名称,因为它们仅可在函数体内使用。
join("hello", "world", ", ")
func join(s1: String, s2: String, joiner: String) -> String {
return s1 + joiner + s2
}
但是代码没有编译:
错误:缺少参数标签's2:joiner:'在通话中 加入(“你好”,“世界”,“,”) ^ s2:木匠:
只有当我尝试使用一个参数时,它才会变为可选
join("hello")
func join(s1: String) -> String {
return s1
}
更令人烦恼的是,根本不允许使用第一个:
join(s1: "hello")
无关的参数标签's1:'在通话中 加入(s1:“你好”)
在阅读涵盖功能的文档时,我是否遗漏了任何内容?
答案 0 :(得分:6)
功能和方法之间的行为不同。
对于方法,默认行为是使用本地名称作为第一个之后所有参数的外部名称。
您可以将方法默认为:
func method(_ arg1: AnyObject?, #arg2: AnyObject?, #arg3: AnyObject?) {
}
您始终可以明确说明您希望如何处理参数
func join(_ s1: String, _ s2: String, _ joiner: String) -> String {
return s1 + joiner + s2
}
具体来说,默认情况下,Swift在方法中为第一个参数名称提供本地参数名称,默认情况下为第二个和后续参数名称提供本地和外部参数名称。此约定与您在编写Objective-C方法时熟悉的典型命名和调用约定相匹配,并且无需限定参数名称即可进行表达式方法调用。
答案 1 :(得分:1)
我认为他们这样做是为了使方法的默认行为与objective-c中的行为相匹配,但您可以通过setting the external parameter name直接控制它
(请注意,如果您不希望函数的调用者为参数命名,则可以使用_
作为外部参数名称。
另请注意:裸机功能与方法相同的方式