如何在Swift中指定使用通用重载函数?

时间:2019-05-03 08:19:48

标签: swift generics overloading

例如,我们有以下代码

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 :(得分:0)

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

答案 1 :(得分:-1)

if let value = value {
    testFunc(value)
}