swift - _ : vs _ String: when writing functions 的区别/用例是什么

标签 swift syntax structure

我学得很快,_ 符号给我带来了很多麻烦。在苹果书“快速应用程序开发”第 15 课中,我们学习了构建结构。我试图理解使用 _: 表示未命名参数和使用 _ St​​ring: 表示某些东西(大概是另一个未命名参数,但我们给它起了名字?)之间的区别?

这是我的示例代码:

    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/

相关文章:

IOS UITableViewRowAction : swipe on cell works randomly

python - 第 1 行带有 print 语句的错误标记

c - 查找最高总分并显示具有该总分的学生信息

python - 一般来说,(Python)项目是如何构建的?

ios - 如何区分委托(delegate)方法中的 UITextFields?

ios - 无法将类型 'FriendTableViewCell.Type' 的值转换为预期的参数类型 'FriendTableViewCell'

mysql - 获取 MySQL 中现有行的插入语句

php - 函数中使用语句不明确的语法错误

c - 嵌套结构的动态数组成员

ios - 每次按下按钮时,如何从标签 "26"中减去 1? (快速初学者)