我有这两个功能:
func random() -> CGFloat {
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
// here
func random(min min: CGFloat, max: CGFloat) -> CGFloat {
return random() % (max - min) + min
}
为什么我应该在第二个函数中编写两次 min
以便像这样调用它:
random(min: 1, max: 5);
最佳答案
在 Swift 3 之前,这是必要的。声明一个这样的函数:
func foo(bar: Baz)
隐式将其更改为:
func foo(_ bar: Baz)
这将使其被称为这样:
foo(Baz())
所以必须这样声明:
func foo(bar bar: Baz)
为了这样调用它:
foo(bar: Baz())
自 Swift 3 起,不再需要这样做。现在,声明一个这样的函数:
func foo(bar: Baz)
隐式将其更改为:
func foo(bar bar: Baz)
这将使其被称为这样:
foo(bar: Baz())
所以现在必须这样声明:
func foo(_ bar: Baz)
为了这样调用它:
foo(Baz())
<小时/>
为什么?
这个想法是每个非自记录参数必须有一个明确的标签,以便阅读代码的人立即知道发生了什么。对于像 setWidth(5)
这样的简单方法,很明显您将宽度设置为 5
,因此第一个参数不需要标签 (setWidth(width: 5) )
是多余的)。但是,对于像 wait(forSeconds: 5)
这样更细致的方法,如果没有 forSeconds:
标签(wait(5)
很容易被视为 5 毫秒)。
关于swift - 为什么我需要复制第一个参数的标签才能使其显示在调用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876268/