假设我有一个在默认参数后面有非默认参数的函数,如下所示:
func f(first:Int = 100, second:Int){}
Run Code Online (Sandbox Code Playgroud)
如何调用它并使用第一个参数的默认值?
nat*_*han 71
当前编译器允许在参数列表中间使用默认参数.

如果要使用first参数的默认值,可以像这样调用函数:
f(1)
Run Code Online (Sandbox Code Playgroud)
如果要为first参数提供新值,请使用其外部名称:
f(first: 3, 1)
Run Code Online (Sandbox Code Playgroud)
该文档说明具有默认值的参数会自动赋予外部名称:
如果您不自己提供外部名称,Swift会为您定义的任何默认参数提供自动外部名称.自动外部名称与本地名称相同,就像您在代码中的本地名称之前编写了哈希符号一样.
Con*_*nor 18
您应该在参数列表的末尾有默认参数.
func f(second:Int, first:Int = 100){}
f(10)
Run Code Online (Sandbox Code Playgroud)
将参数的默认值放在函数的参数列表的末尾.这可以确保对函数的所有调用对其非默认参数使用相同的顺序,并清楚地表明在每种情况下都调用相同的函数.
在 Swift 3 上:
func defaultParameterBefore(_ x: Int = 1, y: Int ) {}
Run Code Online (Sandbox Code Playgroud)
打电话
defaultParameterBefore(2)
Run Code Online (Sandbox Code Playgroud)
会引发这个错误
error: missing argument for parameter 'y' in call
Run Code Online (Sandbox Code Playgroud)
唯一的例外是:
例如:
func defaultParameterBetween(_ x: Int, _ y: Bool = true, _ z: String) {
if y {
print(x)
} else
z()
}
}
// error: missing argument for parameter #3 in call
// defaultParameterWithTrailingClosure(1, { print(0) }
// Trailing closure does work, though.
func defaultParameterWithTrailingClosure(_ x: Int, y: Bool = true,
_ z: () -> Void) {
if y {
print(x)
} else {
z()
}
}
defaultParameterWithTrailingClosure(1) { print(0) }
Run Code Online (Sandbox Code Playgroud)
快速版本:DEVELOPMENT-SNAPSHOT-2016-04-12
| 归档时间: |
|
| 查看次数: |
53102 次 |
| 最近记录: |