我正在快速学习,_符号给我带来了很多麻烦。在苹果书“迅速开发应用程序”第15课中,我们学习构建结构。我试图理解使用_:来表示一个未命名的参数和使用_ String:来表示某些东西(可能是另一个未命名的参数,但我们给它一个名字?)
这是我的示例代码:
struct Rectangle {
let width: Int
let height: Int
var area: Int {
return width*height
}
func biggerThan(_ rectangle: Rectangle) -> Bool {
return area > rectangle.area
}
}
与我的主要问题一样,我不明白为什么这个函数在不改变代码返回行的情况下可以写成(_ rectangle: Rectangle)
或(_:Rectangle)
。
答案 0 :(得分:3)
可能是您遇到了Swift版本问题。在Swift 3中,需要两种语法之一:
func foo(bar:String, bar2:Int) {
}
func foo(_ bar:String, bar2:String) {
}
func foo(bar:String, _ bar2:String) {
}
func foo(_ bar:String, _ bar2:Int) {
}
对此函数的相应调用是:
foo(bar: "Hello World", bar2: 1)
foo("Hello World", bar2: 1)
foo(bar: "Hello World", 1)
foo(bar: "Hello World", 1)
也就是说,签名中的下划线表示您未在通话中声明它。
但是在所有以前版本的Swift中,第一个参数都有一个隐含的下划线,进行相应的调用:
foo("Hello World", bar2: 1)
foo("Hello World", bar2: 1)
foo("Hello World", 1)
foo("Hello World", 1)
另请注意,虽然您可以将下划线视为明确声明不使用名称,但您也可以重命名:
foo(bar myBar:String, bar2 myBar2:Int) {
// internally refer to myBar and myBar2, not bar and bar2
}
电话是:
foo(bar: "Hello World", bar2: 1)