Как избавиться от перегруженных функций

Это полностью надуманный пример, который я написал, изучая перегрузку функций в 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 в обоих случаях.

Другие вопросы по тегам