Function Swift中函数的重新声明无效
我试图编写一些助手函数,但得到了一些类似方法的“无效重新声明”错误。如果有人能解释为什么这些方法会发生冲突,我将非常感激Function Swift中函数的重新声明无效,function,swift,compiler-errors,Function,Swift,Compiler Errors,我试图编写一些助手函数,但得到了一些类似方法的“无效重新声明”错误。如果有人能解释为什么这些方法会发生冲突,我将非常感激 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) -> CG
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)
}
我认为,由于第二个参数具有不同的外部名称,因此该方法将被理解为具有不同的签名。看来情况并非如此
我一直在使用苹果的文档作为参考,但在文章的部分我找不到我的答案。非常感谢您的任何意见 这实际上看起来像文档中的一个bug。在我最初链接到的部分中,写了以下解释 此默认行为有效地将方法视为在numberOfTimes参数之前写入了哈希符号(#):
func incrementBy(amount: Int, #numberOfTimes: Int) {
count += amount * numberOfTimes
}
事实并非如此。当我将哈希符号(#)添加到第二个参数时,不会发生编译器错误
func CGRectModify(rect: CGRect, #height: CGFloat) -> CGRect {
return CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, height)
}
这实际上看起来像文档中的一个bug。在我最初链接到的部分中,写了以下解释 此默认行为有效地将方法视为在numberOfTimes参数之前写入了哈希符号(#):
func incrementBy(amount: Int, #numberOfTimes: Int) {
count += amount * numberOfTimes
}
事实并非如此。当我将哈希符号(#)添加到第二个参数时,不会发生编译器错误
func CGRectModify(rect: CGRect, #height: CGFloat) -> CGRect {
return CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, height)
}
函数的“自动外部参数名”规则与方法不同
Swift根据可调用项的类型应用不同的规则
func f(x:Int, y:Int) { /* ... */ }
let c = { (x:Int, y:Int) -> Void in /* ... */ }
f(1, 2)
c(1, 2)
extension Foo {
subscript(x:Int, y:Int) -> Void {
get { /* ... */ }
}
}
foo[1, 2]
class Foo {
init(x:Int, y:Int) { /* ... */ }
}
let foo = Foo(x: 1, y: 2)
extension Foo {
func bar(x:Int, y:Int) { /* ... */ }
}
foo.bar(1, y:2)
func f(x:Int, y:Int) { /* ... */ }
let c = { (x:Int, y:Int) -> Void in /* ... */ }
f(1, 2)
c(1, 2)
extension Foo {
subscript(x:Int, y:Int) -> Void {
get { /* ... */ }
}
}
foo[1, 2]
- 默认值
func fz(x:Int, y:Int, z:Int = 1) { /* ... */ } fz(1, 1, z: 1)
:禁用“自动外部参数名称”名称:键入
:强制“自动外部参数名称”#名称:键入
:显式外部名称外部名称内部名称:类型
func f(x:Int, y:Int) { /* ... */ }
let c = { (x:Int, y:Int) -> Void in /* ... */ }
f(1, 2)
c(1, 2)
extension Foo {
subscript(x:Int, y:Int) -> Void {
get { /* ... */ }
}
}
foo[1, 2]
class Foo {
init(x:Int, y:Int) { /* ... */ }
}
let foo = Foo(x: 1, y: 2)
extension Foo {
func bar(x:Int, y:Int) { /* ... */ }
}
foo.bar(1, y:2)
func f(x:Int, y:Int) { /* ... */ }
let c = { (x:Int, y:Int) -> Void in /* ... */ }
f(1, 2)
c(1, 2)
extension Foo {
subscript(x:Int, y:Int) -> Void {
get { /* ... */ }
}
}
foo[1, 2]
- 默认值
func fz(x:Int, y:Int, z:Int = 1) { /* ... */ } fz(1, 1, z: 1)
:禁用“自动外部参数名称”名称:键入
:强制“自动外部参数名称”#名称:键入
:显式外部名称外部名称内部名称:类型