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)
}