具有块体的函数中需要 'return' 表达式 ('{...}'
A 'return' expression required in a function with a block body ('{...}'
我想在 CampaignRepositoryImpl.kt class 中使用 getCampaigns 函数中的 rxjava3 调用 api 但我收到以下错误 A 'return' expression required in具有块体的函数 ('{...}')
低于CampaignRepositoryImpl.ktclass
import de.westwing.campaignbrowser.domain.Campaign
import de.westwing.campaignbrowser.domain.CampaignRepository
import io.reactivex.rxjava3.core.Single
class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {
override fun getCampaigns(): Single<List<Campaign>> {
apiInterface.getCampaigns()
}
}
在我的界面下方 class 我收到 API 电话
interface ApiInterface {
@GET("cms/test/campaigns.json")
fun getCampaigns(): Single<CampaignsResponse>
}
低于 CampaignRepository
接口 CampaignRepository {
fun getCampaigns(): Single<List<Campaign>>
}
低于我的CompaignResponse.kt
data class CampaignsResponse(val metadata: CampaignsMetadata)
低于广告活动元数据
data class CampaignsMetadata(val data: List<CampaignDto>)
低于
data class Campaign(val name: String, val description: String)
低于 CampaignDto
class CampaignDto(val name: String, val description: String, val image: ImageDto)
我想知道我在哪里犯了错误我必须做什么才能避免错误
因为你的 ApiInterface return 是 Single,你可以 return 它在方法体中。
您可能需要检查 CampaignRepository 是否具有 getCampaigns() 方法,它应该 return Single.
class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {
override fun getCampaigns(): Single<CampaignsResponse> {
return apiInterface.getCampaigns()
}
}
从你的api界面,我们可以看到getCampaigns()
的类型是Single<CampaignsResponse>
。另一方面,在您的存储库实现中,getCampaigns()
的类型是 Single<List<Campaign>>
.
由于两者都是 Single<Foo>
,您需要 map
从一个到另一个。
鉴于您的 class 实施,这应该有效:
override fun getCampaigns(): Single<List<Campaign>> {
return apiInterface.getCampaigns().map { response ->
response.metadata.data.map {
Campaign(it.name, it.description)
}
}
}
此 map
调用正在将 CampaignResponse
转换为 List<Campaign>
。
我想在 CampaignRepositoryImpl.kt class 中使用 getCampaigns 函数中的 rxjava3 调用 api 但我收到以下错误
低于CampaignRepositoryImpl.ktclass
import de.westwing.campaignbrowser.domain.Campaign
import de.westwing.campaignbrowser.domain.CampaignRepository
import io.reactivex.rxjava3.core.Single
class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {
override fun getCampaigns(): Single<List<Campaign>> {
apiInterface.getCampaigns()
}
}
在我的界面下方 class 我收到 API 电话
interface ApiInterface {
@GET("cms/test/campaigns.json")
fun getCampaigns(): Single<CampaignsResponse>
}
低于 CampaignRepository
接口 CampaignRepository {
fun getCampaigns(): Single<List<Campaign>>
}
低于我的CompaignResponse.kt
data class CampaignsResponse(val metadata: CampaignsMetadata)
低于广告活动元数据
data class CampaignsMetadata(val data: List<CampaignDto>)
低于
data class Campaign(val name: String, val description: String)
低于 CampaignDto
class CampaignDto(val name: String, val description: String, val image: ImageDto)
我想知道我在哪里犯了错误我必须做什么才能避免错误
因为你的 ApiInterface return 是 Single,你可以 return 它在方法体中。 您可能需要检查 CampaignRepository 是否具有 getCampaigns() 方法,它应该 return Single.
class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {
override fun getCampaigns(): Single<CampaignsResponse> {
return apiInterface.getCampaigns()
}
}
从你的api界面,我们可以看到getCampaigns()
的类型是Single<CampaignsResponse>
。另一方面,在您的存储库实现中,getCampaigns()
的类型是 Single<List<Campaign>>
.
由于两者都是 Single<Foo>
,您需要 map
从一个到另一个。
鉴于您的 class 实施,这应该有效:
override fun getCampaigns(): Single<List<Campaign>> {
return apiInterface.getCampaigns().map { response ->
response.metadata.data.map {
Campaign(it.name, it.description)
}
}
}
此 map
调用正在将 CampaignResponse
转换为 List<Campaign>
。