为什么我需要复制第一个参数的标签以使其显示在调用中?
Why do I need to duplicate the first parameter's label to make it show up in calls?
我有这两个功能:
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语法
func random(min: CGFloat, max: CGFloat) -> CGFloat {
return random() % (max - min) + min
}
func random() -> CGFloat {
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
random(1, max: 5)
在 Swift3 之前,这是必要的。像这样声明一个函数:
func foo(bar: Baz)
隐式更改为:
func foo(_ bar: Baz)
这会让它像这样被调用:
foo(Baz())
所以必须这样声明:
func foo(bar bar: Baz)
为了这样称呼它:
foo(bar: Baz())
从Swift3开始,就没有必要了。现在,像这样声明一个函数:
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:
标签,则不清楚 5
的含义(wait(5)
很容易被视为 5 毫秒)。
我有这两个功能:
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语法
func random(min: CGFloat, max: CGFloat) -> CGFloat {
return random() % (max - min) + min
}
func random() -> CGFloat {
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
random(1, max: 5)
在 Swift3 之前,这是必要的。像这样声明一个函数:
func foo(bar: Baz)
隐式更改为:
func foo(_ bar: Baz)
这会让它像这样被调用:
foo(Baz())
所以必须这样声明:
func foo(bar bar: Baz)
为了这样称呼它:
foo(bar: Baz())
从Swift3开始,就没有必要了。现在,像这样声明一个函数:
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:
标签,则不清楚 5
的含义(wait(5)
很容易被视为 5 毫秒)。