Swift: 检查 return 泛型函数的类型
Swift: check return type of generic function
我知道如何检查命名变量的类型 - if var is T
。但是找不到如何检查通用函数的假设 return 类型。
实例,处理 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)")
}
寻找更优雅的方法。
这可行:
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
}
有了这个,您可以在编译时发现错误,而不是在运行时遇到致命错误。
我知道如何检查命名变量的类型 - if var is T
。但是找不到如何检查通用函数的假设 return 类型。
实例,处理 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)")
}
寻找更优雅的方法。
这可行:
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
}
有了这个,您可以在编译时发现错误,而不是在运行时遇到致命错误。