当前位置 : 主页 > 手机开发 > 其它 >

什么能完全区分Swift中的两个函数?

来源:互联网 收集:自由互联 发布时间:2021-06-12
我想知道是什么让两个“相似的功能”彼此不同,并且可以毫不含糊地被称为 这就是我从自学中学到的东西 唯一性来自:函数名称参数顺序和参数名称返回类型.它们的组合必须是唯一的
我想知道是什么让两个“相似的功能”彼此不同,并且可以毫不含糊地被称为

这就是我从自学中学到的东西

唯一性来自:函数名称参数顺序和参数名称返回类型.它们的组合必须是唯一的才能使功能独特(请参阅下面的示例)

> Nmu1和Num2会导致含糊不清,因为返回类型(没有所谓的返回名称,函数名称已经充当此角色)在调用函数时不会被引用
>虽然Num3函数具有不同的参数名称,但它不会将它与Num1和Num2中的函数唯一地分开.因为在调用函数时参数名称不会被引用,所以只有不同的参数名称不会使函数唯一;并且Num4中的函数与上面的所有函数不同,因为它的签名函数名称Argument order和参数名称返回类型在所有前3个函数中是唯一的.
> Num5和Num6函数彼此不同,因为它们在定义时具有不同的参数顺序

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

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

网友评论