Swift:检查泛型函数的返回类型

时间:2016-09-14 12:32:18

标签: swift generics return-type typechecking

我知道如何检查命名变量的类型 - if var is T。但无法找到如何检查泛型函数的假定返回类型。

实例,处理SwiftyJSON,丑陋的解决方案:

func getValue<T>(key: String) -> T? {
    let result: T // so ugly approach...
    if result is Bool {
        return json[key].bool as? T
    }
    if result is Int {
        return json[key].int as? T
    }
    if result is String {
        return json[key].string as? T
    }
    fatalError("unsupported type \(result.dynamicType)")
}

寻找更优雅的方法。

1 个答案:

答案 0 :(得分:2)

这样可行:

func getValue<T>(key: String) -> T? {
    if T.self is Bool.Type {
        return json[key].bool as? T
    }
    if T.self is Int.Type {
        return json[key].int as? T
    }
    if T.self is String.Type {
        return json[key].string as? T
    }
    fatalError("unsupported type \(T.self)")
}

但我不确定它比你的更优雅。

重载是值得尝试的:

func getValue(key: String) -> Bool? {
    return json[key].bool
}
func getValue(key: String) -> Int? {
    return json[key].int
}
func getValue(key: String) -> String? {
    return json[key].string
}

有了这个,您可以在编译时发现错误,而不是在运行时发现致命错误。