我现在遇到了一个知识问题,非常感谢您能提供的任何帮助。这是我的问题,我有多种功能:
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
var betterMatchResults = try JSONDecoder().decode(BetterMatchResults.self, from: data)
betterMatchResults.result = betterMatchResults.result.map {(betterMatch) in
var match = betterMatch
match.odds = match.odds.sorted(by: { $0.name < $1.name })
return match
}
//Test the response...
print(betterMatchResults.result.map({ $0.odds.map({ $0.name }) })) //[["3Way Result", "Correct Score", "Over/Under"]]
} catch {
print(error)
}
我不想使用其他类型重载 fun read(key: Key, defaultValue: String): String? {
return prefs.getString(key.name, defaultValue)
}
fun read(key: Key, defaultValue: Boolean): Boolean? {
return prefs.getBoolean(key.name, defaultValue)
}
fun read(key: Key, defaultValue: Int): Int {
return prefs.getInt(key.name, defaultValue)
}
函数,我想使用这样的东西:
read
但是,IDE不允许我,因为返回类型存在非通用类型的问题,我知道可以做这样的事情,但不知道如何做。
您能帮我整理一下fun<T> read(key: Key, defaultValue: T): T? {
return when(defaultValue){
is String -> prefs.getString(key.name, defaultValue)
is Boolean -> prefs.getBoolean(key.name, defaultValue)
else -> throw IllegalArgumentException()
}
}
吗?
答案 0 :(得分:0)
就我而言, 重载要好得多,而且是一种干净的方法 ,但是如果您不愿意这样做,则可以使用未经检查的强制转换< / p>
fun<T> read(key: Key, defaultValue: T): T? {
return when(defaultValue){
is String -> prefs.getString(key.name, defaultValue) as T
is Boolean -> prefs.getBoolean(key.name, defaultValue) as T
else -> throw IllegalArgumentException()
}
}