Ios 函数参数名称don';不要按照文件行事

Ios 函数参数名称don';不要按照文件行事,ios,swift,Ios,Swift,根据手册: 函数参数名 这些参数名仅在函数本身的主体中使用,在调用函数时不能使用。这些类型的参数名称为本地参数名,因为它们仅可在函数体中使用 join("hello", "world", ", ") func join(s1: String, s2: String, joiner: String) -> String { return s1 + joiner + s2 } 但是代码没有编译: 错误:调用中缺少参数标签“s2:joiner:” 加入(“你好”,“世界”,

根据手册:

函数参数名

这些参数名仅在函数本身的主体中使用,在调用函数时不能使用。这些类型的参数名称为本地参数名,因为它们仅可在函数体中使用

    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:“你好”)


在阅读有关函数的文档时,我是否遗漏了任何内容?

我认为他们这样做是为了使方法的默认行为与objective-c中的方法相匹配,但您可以通过

(请注意,如果不希望函数的调用者命名参数,则可以使用
\uu
作为外部参数名)


还要注意:它对裸函数的工作方式与对方法的工作方式不同

函数和方法的行为不同

对于方法,默认行为是使用本地名称作为第一个参数之后所有参数的外部名称

您可以考虑默认为以下的方法:

func method(_ arg1: AnyObject?, #arg2: AnyObject?, #arg3: AnyObject?) {
}
您始终可以显式地说明如何处理参数

func join(_ s1: String, _ s2: String, _ joiner: String) -> String {
    return s1 + joiner + s2
}
具体来说,Swift默认为方法中的第一个参数名提供本地参数名,默认为第二个和后续参数名提供本地和外部参数名。此约定与您在编写Objective-C方法时熟悉的典型命名和调用约定相匹配,并允许进行表达性方法调用,而无需限定参数名称


将第一个参数设置为具有外部名称——即,使其行为类似于第二个参数,等等——只需在参数名称前面加一个#。