gpt4 book ai didi

swift - 究竟是什么区分了 Swift 中的两个函数?

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:20 25 4
gpt4 key购买 nike

我想知道是什么让两个“相似的函数”彼此不同并且可以明确调用

这是我从自学中学到的

唯一性来自于:函数名+参数顺序和参数名+返回类型。它们的组合必须是唯一的,才能使函数唯一(请看下面的例子)

  1. Nmu1Num2 会引起歧义,因为返回类型(没有所谓的返回名,函数名已经充当了这个角色) 在调用函数时不被引用

  2. 虽然Num3函数有一个不同的参数名,但它不会唯一地将它与Num1Num2中的函数区分开来.因为在调用函数时不会引用参数名称,所以只有不同的参数名称不会使函数唯一;而Num4中的函数与上述所有函数都不一样,因为它的签名函数名+参数顺序和参数名+返回类型在所有前面3个函数中是唯一的。

  3. Num5Num6 函数是不同的,因为它们在定义时有不同的参数顺序

    //Num1
    func foo(guy name: String) -> String {
    return "Hi \(name)"
    }

    //Num2
    func foo(guy name: String) {
    print("Hi \(name)")
    }

    //Num3
    func foo(guy called: String) -> String {
    return "Hi \(called)"
    }

    //Num4
    func foo(dude name: String) -> String {
    return "What's up \(name)"
    }

    //Num5
    func foo(man name: String, from place: String) {
    print("Hi! I'm \(name) I come from \(place)")
    }

    //Num6
    func foo(from place: String, man name: String) {
    print("Hi! I'm \(name) I come from \(place)")
    }

问题:我可能会遗漏甚至误解某些部分。如果你能纠正我并添加我遗漏的部分,那将是非常好的

谢谢

[更新]让我们再讨论一下这个问题。让我们从讨论 the difference between Argument and Parameter 的问题开始.这个问题在这里很有意义!

回到swift官方文档的引用

Each function parameter has both an argument label and a parameter name. The argument label is used when calling the function; each argument is written in the function call with its argument label before it. The parameter name is used in the implementation of the function. By default, parameters use their parameter name as their argument label.

参数、参数、参数标签和参数名称不同。这里的差异可以用于微分函数。

具有相同参数名、相同参数顺序、相同返回类型甚至相同函数体的函数可以通过不同的参数标签来区分。

func foo(dude name: String) -> Int {
print("Hi \(name)!")
return 1
}

func foo(man name: String) -> Int {
print("Hi \(name)!")
return 1
}

//foo(dude: String) & foo(man: String) is identical when calling

欲了解更多信息,请发送至Multiple functions with the same name

最佳答案

定义为Obj-C兼容方法,Num1和Num2不能共存,在NSObject子类中定义会出错;但是,您可以将它们标记为 @nonobjc 并且错误将消失,因为 Swift 能够根据预期的返回类型选择正确的重载:

//Num1
@nonobjc func foo(guy name: String) -> String {
return "Hi \(name)"
}

//Num2
@nonobjc func foo(guy name: String) {
print("Hi \(name)")
}

除了这个标记,你的所有其他观点对我来说都是正确的

关于swift - 究竟是什么区分了 Swift 中的两个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39530015/

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