gpt4 book ai didi

function - Swift 中无效的函数重新声明

转载 作者:搜寻专家 更新时间:2023-11-01 05:59:21 25 4
gpt4 key购买 nike

我正在尝试编写一些辅助函数,但遇到了一些类似方法的“无效重新声明”错误。如果有人能解释为什么这些方法会发生冲突,我将非常感激。

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)
}

我认为因为第二个参数具有不同的外部名称,所以该方法将被理解为具有不同的签名。似乎并非如此。

我一直在使用 Apple 的文档作为引用,但在 Local and External Parameter Names for Methods 的部分我找不到我的答案。非常感谢任何输入。

最佳答案

函数的“自动外参名”规则与方法不同。

Swift 根据可调用对象的类型应用不同的规则。

  1. 函数/闭包document

    没有执行“自动外部参数名称”。

    func f(x:Int, y:Int) { /* ... */ }
    let c = { (x:Int, y:Int) -> Void in /* ... */ }

    f(1, 2)
    c(1, 2)
  2. 初始化器document

    “自动外部参数名称”是每个参数的默认值。

    class Foo {
    init(x:Int, y:Int) { /* ... */ }
    }

    let foo = Foo(x: 1, y: 2)
  3. 方法document

    第一个参数的“自动外部参数名称”除外

    extension Foo {
    func bar(x:Int, y:Int) { /* ... */ }
    }

    foo.bar(1, y:2)
  4. 下标 → 文件丢失?

    没有执行“自动外部参数名称”。

    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)

当然,您可以使用以下方法覆盖这些默认行为:

  • _ name:Type: 禁用“自动外部参数名称”
  • #name:Type:强制“自动外部参数名称”
  • externalName internalName:Type: 明确的外部名称

关于function - Swift 中无效的函数重新声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com