atr*_*eat 1 compiler-errors function swift
我正在尝试编写一些辅助函数,并且正在获得某些类似方法的"无效重新声明"错误.如果有人能解释为什么这些方法发生碰撞,我会非常感激.
func CGRectModify(rect: CGRect, x: CGFloat) -> CGRect {
return CGRectMake(x, rect.origin.y, rect.size.width, rect.size.height)
}
func CGRectModify(rect: CGRect, y: CGFloat) -> CGRect {
return CGRectMake(rect.origin.x, y, rect.size.width, rect.size.height)
}
func CGRectModify(rect: CGRect, width: CGFloat) -> CGRect {
return CGRectMake(rect.origin.x, rect.origin.y, width, rect.size.height)
}
func CGRectModify(rect: CGRect, height: CGFloat) -> CGRect {
return CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, height)
}
Run Code Online (Sandbox Code Playgroud)
我认为因为第二个参数具有不同的外部名称,所以该方法将被理解为具有不同的签名.似乎并非如此.
函数的"自动外部参数名称"规则与方法不同.
Swift应用不同的规则取决于callables的类型.
功能/闭包 → 文档
不执行"自动外部参数名称".
func f(x:Int, y:Int) { /* ... */ }
let c = { (x:Int, y:Int) -> Void in /* ... */ }
f(1, 2)
c(1, 2)
Run Code Online (Sandbox Code Playgroud)初始化器 → 文件
"自动外部参数名称"是每个参数的默认值.
class Foo {
init(x:Int, y:Int) { /* ... */ }
}
let foo = Foo(x: 1, y: 2)
Run Code Online (Sandbox Code Playgroud)方法 → 文件
"自动外部参数名称" 除第一个参数外.
extension Foo {
func bar(x:Int, y:Int) { /* ... */ }
}
foo.bar(1, y:2)
Run Code Online (Sandbox Code Playgroud)下标 →文件遗失?
不执行"自动外部参数名称".
extension Foo {
subscript(x:Int, y:Int) -> Void {
get { /* ... */ }
}
}
foo[1, 2]
Run Code Online (Sandbox Code Playgroud)对...的特殊规则
默认值
func fz(x:Int, y:Int, z:Int = 1) { /* ... */ }
fz(1, 1, z: 1)
Run Code Online (Sandbox Code Playgroud)当然,您可以使用以下方法覆盖这些默认行为
_ name:Type:禁用"自动外部参数名称"#name:Type:强制"自动外部参数名称"externalName internalName:Type:显式外部名称