Ios 初始值设定项和函数中参数之间的快速语法差异
在我看来,Swift的语法在调用初始值设定项和至少有一个参数的函数之间存在差异 我们考虑这两个例子:Ios 初始值设定项和函数中参数之间的快速语法差异,ios,swift,syntax,Ios,Swift,Syntax,在我看来,Swift的语法在调用初始值设定项和至少有一个参数的函数之间存在差异 我们考虑这两个例子: class SimpleClass { var desc: String init(desc: String) { self.desc = desc } } let aClass = SimpleClass(desc: "description") 及 我觉得奇怪的是,编译器强制您忽略函数调用中的第一个标签,否则您将得到一个错误“调用中的无关参数标
class SimpleClass {
var desc: String
init(desc: String) {
self.desc = desc
}
}
let aClass = SimpleClass(desc: "description")
及
我觉得奇怪的是,编译器强制您忽略函数调用中的第一个标签,否则您将得到一个错误“调用中的无关参数标签'a:”。然而,如果我们想在初始化过程中省略第一个标签,则会出现错误“调用中缺少参数标签'desc:”
语言指南说:
当使用多个参数调用函数时,第一个参数之后的任何参数都将根据其相应的参数名进行标记
资料来源:
初始化器的参数在
您将创建该类的一个实例
资料来源:
我是Swift新手,所以我希望我没有遗漏什么,但这似乎是语法上的差异,因为初始值设定项/构造函数只是一种函数,在函数调用中强制省略第一个标签对我来说似乎不一致。这是因为Swift注重可读性;函数调用,以便能够像句子一样阅读。具体请参见“方法的本地和外部参数名称”一节。为了符合这种风格,您的函数应该更像:
func add(a: Int, to b: Int) -> Int {
return a + b
}
let c = add(1, to: 2)
谢谢你的解释,对我来说仍然很不寻常。Swift继承了Objective C风格,其中参数名通常是函数名的一部分:[self addA:1 toB:2]Swift:addA(1,toB:2)Init是一个特例。它是一个关键字,不能创建initA()或initB(),它总是init(),所以默认情况下需要第一个参数名。
func add(a: Int, to b: Int) -> Int {
return a + b
}
let c = add(1, to: 2)