初始化器和函数中的参数之间的Swift语法差异

时间:2015-08-15 19:15:36

标签: ios swift syntax

在我看来,Swift的语法在调用初始化程序和至少有一个paremeter的函数之间存在差异。

让我们考虑这两个例子:

class SimpleClass {

    var desc: String

    init(desc: String) {
        self.desc = desc
    }
}

let aClass = SimpleClass(desc: "description")

func simpleFunc(a: Int, b:Int) -> Int {
    return a + b;
}

let aVal = simpleFunc(5, b: 6)

对我来说,编译器强制你在函数调用中省略第一个标签似乎很奇怪,否则你会得到一个错误“无关的参数标签'a:'在调用中”。然而,如果我们想要在启动期间省略第一个标签,则会在调用中收到错误“Missing argument label'sdesc:'。

语言指南说:

  

当调用具有多个参数的函数时,第一个参数之后的任何参数都会根据其对应的参数名称进行标记。

来源:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html

  

初始化程序的参数像函数调用一样传递   你创建了一个类的实例。

来源:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html

我是Swift的新手所以我希望我没有错过任何东西,但这似乎是一种语法差异,因为初始化器/构造函数只是一种函数,并且强制省略函数调用中的第一个标签似乎不一致我

1 个答案:

答案 0 :(得分:2)

那是因为Swift专注于可读性;函数调用能够像句子一样被读取。请参阅this,特别是“方法的本地和外部参数名称”部分。为了符合这种风格,你的功能应该更像是:

func add(a: Int, to b: Int) -> Int {
    return a + b
}

let c = add(1, to: 2)