Wciąż widzę klasy Swift, w których zdefiniowano dwie metody różniące się tylko typem zwrotnym. Nie jestem przyzwyczajony do pracy w językach, w których jest to dozwolone (Java, C#, itp.), Więc poszedłem szukać dokumentacji, która opisuje, jak to działa w Swift. Nigdzie niczego nie znalazłem. Spodziewałbym się całej sekcji w książce Swift. Gdzie jest to udokumentowane?Swift: przeciążenia metod różniące się tylko typem zwrotu
Oto przykład tego, co mówię (używam 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"
}
}
Test:
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"
Wydaje mi się, że twoje demo dość dobrze wyjaśnia rzeczy. Jeśli kompilator może określić, której funkcji użyć, jest to dozwolone. Obejmuje to nie tylko nazwę funkcji, ale także nazwy i typy argumentów, a także typ zwracany. Funkcje z różnymi sygnaturami liczą się jako różne funkcje. – Eric