Как я могу указать использование универсальной перегруженной функции в Swift? - PullRequest
0 голосов
/ 03 мая 2019

Например, у нас есть следующий код

func testFunc<T>(_ value: T) {
    // do something
}

// This overloaded function is provided on a newer version of SDK, we need to check the SDK version.
func testFunc<T>(_ value: T?) {
    // do something if we have an optional value
}

Если у меня есть необязательное значение , как я могу указать, что я хочу вызывать функцию first вместо функции second ? Это объясняется тем, что функция second может быть доступна только в более новом SDK, поэтому мне нужен запасной вариант.

Ответы [ 2 ]

0 голосов
/ 03 мая 2019
if let value = value {
    testFunc(value)
}

0 голосов
/ 03 мая 2019

Swift пытается выбрать наиболее конкретную возможную функцию. Таким образом, для вызова testFunc<T>(_ value: T) вы должны передать необязательный T. Если вы передадите туда опциональную или принудительно развернутую T, будет вызвана вторая функция testFunc<T>(_ value: T?).
Вы не можете явно указать компилятору, какую перегруженную функцию использовать, вы можете только изменить параметры, чтобы они точно соответствовали перегруженной функции, которую вы хотите вызвать.

Этот фрагмент гарантирует, что testFunc<T>(_ value: T) будет называться

let optional: Int? = 5
if let optional = optional {
   testFunc(optional)
}
...