功能参数名称不符合文档

时间:2014-06-09 14:52:26

标签: ios swift

根据手册:

功能参数名称

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

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

在阅读涵盖功能的文档时,我是否遗漏了任何内容?

2 个答案:

答案 0 :(得分:6)

功能和方法之间的行为不同。

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

您可以将方法默认为:

func method(_ arg1: AnyObject?, #arg2: AnyObject?, #arg3: AnyObject?) {
}

您始终可以明确说明您希望如何处理参数

func join(_ s1: String, _ s2: String, _ joiner: String) -> String {
    return s1 + joiner + s2
}

The Swift Programming Language | Language Guide | Methods

  

具体来说,默认情况下,Swift在方法中为第一个参数名称提供本地参数名称,默认情况下为第二个和后续参数名称提供本地和外部参数名称。此约定与您在编写Objective-C方法时熟悉的典型命名和调用约定相匹配,并且无需限定参数名称即可进行表达式方法调用。

答案 1 :(得分:1)

我认为他们这样做是为了使方法的默认行为与objective-c中的行为相匹配,但您可以通过setting the external parameter name直接控制它

(请注意,如果您不希望函数的调用者为参数命名,则可以使用_作为外部参数名称。

另请注意:裸机功能与方法相同的方式