Как избавиться от перегруженных функций
Это полностью надуманный пример, который я написал, изучая перегрузку функций в Swift. Следующие функции отличаются только типом возврата (первая функция неявно возвращает Void
/ ()
в то время как другой возвращается Int
).
func foo(x:Int, y:Int) {
}
func foo(x:Int, y:Int) -> Int {
return 0
}
// Call the version which returns Int
let i: Int = foo(6, y: 7)
// Call the version which returns Void
let v: Void = foo(6, y: 7)
// Ambiguous
foo(6, y:7) // How can I force a call to the Void version without using let/var?
// I thought this might work but doesn't
foo(6,y: 7) as (Int, Int) -> Void
Есть ли способ, которым я могу позвонить Void
версия без использования let
то есть какой-то тип приведения? Опять же, я понимаю, что это надуманный пример, но я хотел бы понять варианты здесь.
1 ответ
Решение
Вы можете избавиться от двух foo
функции путем приведения результата:
foo(6, y: 7) as Int
foo(6, y: 7) as Void
или вы можете разыграть foo
сам:
(foo as (Int, y: Int) -> Int)(6, y: 7)
(foo as (Int, y: Int) -> Void)(6, y: 7)
Замечания: ()
может быть использован вместо Void
в обоих случаях.