2017-11-05 4 views
1

コードAは私が代わりのリターンを聞かせてを使用したいと考えていhttps://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.ktKotlinではletの代わりにreturnを使う方法はありますか?

からであるので、私はコードBの書き込みが、コードBをコンパイルすることができない、と私は2つのエラーを取得し、なぜですか?

エラー:(30、10) 'リターン' はここでは許可されていない

エラー:(30、45)のミスマッチを入力:CityForecast推論タイプですか?しかしCityForecastは

コードA

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)) } 

     val city = select(CityForecastTable.NAME) 
       .whereSimple("${CityForecastTable.ID} = ?", zipCode.toString()) 
       .parseOpt { CityForecast(HashMap(it), dailyForecast) } 

     city?.let { dataMapper.convertToDomain(it) } 
    } 

期待コードB

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)) } 

     val city = select(CityForecastTable.NAME) 
       .whereSimple("${CityForecastTable.ID} = ?", zipCode.toString()) 
       .parseOpt { CityForecast(HashMap(it), dailyForecast) } 

     return dataMapper.convertToDomain(city) 
    } 
+0

dataMapper.convertToDomain(city!!) 

が横に、あなたは、ラムダから返すようにしたい場合はqualified returnsを使用する必要があります。クロージャの最後の式は、暗黙的に返される値です。 –

答えて

4

convertToDomain非ヌルCityForecast代わりにNULL可能CityForecast?を期待されました。したがって、letを使用する方が良い方法です。そうでなければ、アンラップこのようなNULL可能cityを強制する必要があります:あなたが閉鎖から復帰しない場合があり

[email protected] dataMapper.convertToDomain(city!!) 
関連する問題