我学得很快,_ 符号给我带来了很多麻烦。在苹果书“快速应用程序开发”第 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)
而不改变代码的返回行。
最佳答案
可能是您遇到了 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)
关于swift - _ : vs _ String: when writing functions 的区别/用例是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968137/