Swift 当编写函数时uv:vs uu字符串:的区别/用例是什么

Swift 当编写函数时uv:vs uu字符串:的区别/用例是什么,swift,syntax,structure,Swift,Syntax,Structure,我正在学习swift,这个符号给我带来了很多麻烦。在苹果书《swift中的应用程序开发》第15课中,我们学习构建结构。我试图理解使用uo:表示一个未命名参数和使用uo:字符串表示某个东西(可能是另一个未命名参数,但我们给它起了个名字?)之间的区别 下面是我的示例代码: struct Rectangle { let width: Int let height: Int var area: Int { return wi

我正在学习swift,这个符号给我带来了很多麻烦。在苹果书《swift中的应用程序开发》第15课中,我们学习构建结构。我试图理解使用uo:表示一个未命名参数和使用uo:字符串表示某个东西(可能是另一个未命名参数,但我们给它起了个名字?)之间的区别

下面是我的示例代码:

    struct Rectangle {
        let width: Int
        let height: Int
        var area: Int {
            return width*height
        }

func biggerThan(_ rectangle: Rectangle) -> Bool {
    return area > rectangle.area
    }
}

与我的主要问题一样,我不明白为什么这个函数在不更改代码返回行的情况下,以
(\u矩形:矩形)
(\uquot:矩形)
的形式编写。

可能是您遇到了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)

如果您将
(\uRectangle:rectangle)
更改为
(\uRectangle)
,您的代码将无法编译,因为您在正文中使用了
矩形。哈米什,我也认为不会。xcode操场编译正常。单词矩形从白色变为绿色,但它仍然按预期运行代码。不要在操场上测试-它们超级多车而且不可靠。在一个真实的项目中测试它,你会发现它无法编译。我只是在xcode中运行了它,你是对的!谢谢,我没有意识到这是xcode/PlayGrounds中的一个问题非常感谢dfd,这为我澄清了这个问题