我知道 Anko 提供了 parseSingle、parseOpt 和 parseList 函数,我不明白为什么 Android 开发者(书)的代码需要再次设计扩展 parseList 。
你可以告诉我吗?谢谢!
https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt
override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {
val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
val dailyForecast = select(DayForecastTable.NAME)
.whereSimple(dailyRequest, zipCode.toString(), date.toString())
.parseList { DayForecast(HashMap(it)) }
}
https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt
fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> =
parseList(object : MapRowParser<T> {
override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})
Anko's parseList
需要一个MapRowParser
,不是函数。这简化了使用。使用 Anko 版本你会写
.parseList { mapRowParser { DayForecast(HashMap(it)) } }
反而。假设有一个构造函数,例如mapRowParser
我在他们的来源中找不到;否则,你可能会写得很简单。
或者更确切地说,它已经在示例代码中为您编写,只是不是作为单独的函数:
fun <T> mapRowParser(parser: (Map<String, Any?>) -> T): MapRowParser<T> =
object : MapRowParser<T> {
override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
}
老实说,如果这个函数还不存在,我真的很惊讶(也许叫别的东西,但是什么?)。 OTOH,如果它确实存在,Leiva 应该使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)