我想知道是什么让两个“相似的功能”彼此不同,并且可以毫不含糊地被称为
这是我从自学中学到的东西
唯一性来自:函数名+参数顺序和参数名+返回类型。它们的组合必须是唯一的才能使功能独特(请参见下面的示例)
Nmu1
和Num2
会导致含糊不清,因为在调用时不会引用返回类型(没有所谓的返回名称,函数名称已充当此角色)功能
虽然Num3
函数具有不同的参数名称,但它不会唯一地将其与Num1
和Num2
中的函数分开。因为在调用函数时参数名称不会被引用,所以只有不同的参数名称不会使函数唯一; Num4
中的函数与上面的所有函数不同,因为它的签名函数名称+参数顺序和参数名称+返回类型在所有之前的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文件的引用
每个函数参数都有参数标签和参数名称。调用函数时使用参数标签;每个参数都写在函数调用中,其前面带有参数标签。参数名称用于函数的实现。默认情况下,参数使用其参数名称作为参数标签。
参数,参数,参数标签和参数名称不同。这里的差异可以用于差分函数。
具有相同参数名称,相同参数顺序,相同返回类型甚至相同函数体的函数可以与不同的参数标签区分开来。
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
答案 0 :(得分:3)
定义为与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)")
}
除了这个标记之外的所有其他要点对我来说似乎都是正确的