Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3.1中初始化参数的参数标签_Swift_Initializer - Fatal编程技术网

Swift 3.1中初始化参数的参数标签

Swift 3.1中初始化参数的参数标签,swift,initializer,Swift,Initializer,苹果公司的书《Swift编程语言Swift 3.1》陈述了以下内容: 与函数和方法参数一样,初始化参数可以有一个参数名,用于初始值设定项的主体内,也可以有一个参数标签,用于调用初始值设定项 但是,初始值设定项并不像函数和方法那样在括号前有一个标识函数名。因此,初始值设定项参数的名称和类型在确定应调用哪个初始值设定项方面起着特别重要的作用。因此,如果您不提供参数标签,Swift会为初始值设定项中的每个参数提供一个自动参数标签 我不理解最后一句话,因为在参数名称/标签方面,我没有注意到函数/方法和初

苹果公司的书《Swift编程语言Swift 3.1》陈述了以下内容:

与函数和方法参数一样,初始化参数可以有一个参数名,用于初始值设定项的主体内,也可以有一个参数标签,用于调用初始值设定项

但是,初始值设定项并不像函数和方法那样在括号前有一个标识函数名。因此,初始值设定项参数的名称和类型在确定应调用哪个初始值设定项方面起着特别重要的作用。因此,如果您不提供参数标签,Swift会为初始值设定项中的每个参数提供一个自动参数标签


我不理解最后一句话,因为在参数名称/标签方面,我没有注意到函数/方法和初始值设定项之间的任何区别。如何为初始值设定项自动提供参数标签?

描述的功能如下:给定结构:

struct Point {
    let x: Double
    let y: Double
}
Swift将自动生成Point.initx:Double,y:Double。如果在主结构定义中添加自己的init方法,那么Swift将不会创建自动init。如果在扩展中添加一个init,那么将得到一个自动init。这就是为什么人们经常在结构的扩展中添加便利init

最后一段试图指出的一点是,点X:y:比点\更可取。初始值设定项中的标签甚至比方法名称中的标签更有价值,因为所有初始值设定项都具有相同的基名称init。他们只是解释为什么他们没有选择一些人可能期望来自其他语言的更隐含的默认值


简而言之,有时未标记的参数在方法中是有意义的,这取决于方法的名称以及第一个参数的明确程度。但在init中,未标记的参数应该引起强烈的怀疑。

起初我认为,如果不提供一个参数标签,则表示参数标签,但它似乎表示初始值设定项本身。我说的对吗?没错。是的,那里的语言有点模棱两可。如果你已经知道它们的意思,那么这就最有意义了:至少对我来说,这听起来像是Swift 2.2语言指南中的一个版本,他们从未删除/更新过。在Swift 2中,方法和顶级函数没有为第一个参数提供自动参数标签,如果需要,必须显式指定它,但初始化器为每个参数提供了自动参数标签。但在任何情况下,措辞都可能更加清晰。这也是我最初的想法:请看看下面Rob Napier回答下的评论,尽管我们可能误解了他们的话。我不相信他们说的是memberwise初始值设定者,因为他们没有明确提及,指南后面会有这一部分。也许你是对的,我还没到那里: