【发布时间】:2015-07-29 22:46:29
【问题描述】:
我经常看到 Swift 类中定义了两个方法,它们仅在返回类型上有所不同。我不习惯使用允许这样做的语言(Java、C# 等)工作,所以我去寻找描述它在 Swift 中如何工作的文档。我在任何地方都找不到任何东西。我本来希望 Swift 书中有一整节的内容。这是在哪里记录的?
这是我正在谈论的一个示例(我使用的是 Swift 2,FWIW):
class MyClass {
subscript(key: Int) -> Int {
return 1
}
subscript(key: Int) -> String {
return "hi"
}
func getSomething() -> Int {
return 2
}
func getSomething() -> String {
return "hey"
}
}
测试:
let obj = MyClass()
//let x = obj[99]
// Doesn't compile: "Multiple candidates fail to match based on result type"
let result1: String = obj[123]
print("result1 \(result1)") // prints "result1 hi"
let result2: Int = obj[123]
print("result2 \(result2)") // prints "result2 1"
//let x = obj.getSomething()
// Doesn't compile: "Ambiguous use of 'getSomething'"
let result3: String = obj.getSomething()
print("result3 \(result3)") // prints "result3 hey"
let result4: Int = obj.getSomething()
print("result4 \(result4)") // prints "result4 2"
【问题讨论】:
-
我认为你的演示很好地解释了事情。如果编译器可以确定使用哪个函数,则允许。这不仅包括函数的名称,还包括参数的名称和类型以及返回类型。具有不同签名的函数算作不同的函数。