【发布时间】:2018-02-25 05:45:16
【问题描述】:
我正在为别人的代码 (SEC) 编写一个接口,并且我有一长串或多或少像这样的函数:
public func readString(_ row: Row, columnName: String) -> String? {
return SEC.getString(row, columnName)
}
public func readInt(_ row: Row, columnName: String) -> Int? {
return SEC.getInt(row, columnName)
}
等等。
我想做的是有一个单一的功能:
public func read<T>(_ row: Row, columnName: String) -> T? {
// call correct SEC.get* method
}
我在T 和T.Type 上尝试了一个简单的 switch 语句,但没有骰子。我还尝试了上述的修改版本:
public func read<T: ReadableType>(_ row: Row, columnName: String) -> T? {
let getter = T.getterMethod
return getter(row, columnName)
}
我可以在其中创建具有SEC.get* 函数的元类型的enum,并对其进行扩展以返回正确的getter 方法。这对我来说似乎很理想。唉:
public enum ReadableTypes {
case String.Type // nope
case Int.self // also nope
}
我不确定还可以尝试什么;如果我只有一打 read* 方法,这还不是世界末日,但如果我可以将其设为通用,调用此方法的代码可能会非常紧凑。
【问题讨论】: