Continuo a vedere le classi Swift in cui sono definiti due metodi che differiscono solo per il tipo restituito. Non sono abituato a lavorare in lingue in cui ciò è consentito (Java, C#, ecc.), Quindi sono andato a cercare la documentazione che descrive come funziona in Swift. Non ho trovato assolutamente nulla da nessuna parte. Mi sarei aspettato un'intera sezione su di esso nel libro Swift. Dove è documentato?Swift: overload di metodi che differiscono solo nel tipo di ritorno
Ecco un esempio di cosa sto parlando (sto usando 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"
}
}
prova:
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"
Penso che la tua demo ci spieghi le cose abbastanza bene. Se il compilatore può determinare quale funzione usare, è permesso. Questo include non solo il nome della funzione, ma anche nomi e tipi di argomenti e anche il tipo di ritorno. Le funzioni con diverse firme contano come funzioni diverse. – Eric