Apple的书" Swift编程语言(Swift 3.1)" 陈述如下:
与函数和方法参数一样,初始化参数既可以具有在初始化程序体内使用的参数名称,也可以具有在调用初始化程序时使用的参数标签。
但是,初始值设定项在括号之前没有函数和方法的标识函数名称。因此,初始化程序参数的名称和类型在识别应该调用哪个初始化程序时起着特别重要的作用。 因此,如果您不提供初始值,Swift会为初始化程序中的每个参数提供自动参数标签。
我不理解最后一句话,因为在参数名称/标签方面我没有注意到函数/方法和初始值设定项之间的任何区别。如何为初始化程序自动提供参数标签?
答案 0 :(得分:1)
所描述的特征是:给定结构:
struct Point {
let x: Double
let y: Double
}
Swift会自动生成Point.init(x: Double, y: Double)
。如果您在主init
定义中添加了自己的struct
方法,则Swift无法创建自动init
。 (如果您在扩展程序中添加了init
,那么将获得自动init
。这就是为什么人们经常在结构扩展中添加便利init
的原因。)
最后一段试图提出的观点是Point(x:y:)
优于Point(_:_:)
。初始化程序中的标签甚至比方法名称中的标签更有价值,因为所有初始化程序都具有相同的基数" name(" init")。他们只是在解释为什么他们没有选择一些人们可能期望来自其他语言的更隐含的默认值。
简而言之,有时未标记的参数在方法中有意义,具体取决于方法的名称以及制作第一个参数的明确程度。但是在init
中,未标记的参数应该被强烈怀疑。