在我看来,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:'。
语言指南说:
当调用具有多个参数的函数时,第一个参数之后的任何参数都会根据其对应的参数名称进行标记。
初始化程序的参数像函数调用一样传递 你创建了一个类的实例。
我是Swift的新手所以我希望我没有错过任何东西,但这似乎是一种语法差异,因为初始化器/构造函数只是一种函数,并且强制省略函数调用中的第一个标签似乎不一致我
答案 0 :(得分:2)
那是因为Swift专注于可读性;函数调用能够像句子一样被读取。请参阅this,特别是“方法的本地和外部参数名称”部分。为了符合这种风格,你的功能应该更像是:
func add(a: Int, to b: Int) -> Int {
return a + b
}
let c = add(1, to: 2)