1

在下面,我试图延迟一个变量,如图所示。然而,在互联网上遵循一些示例之后,我理解了它的概念,但是由于方法 setupCommRequestService() 中所述的代码,我收到了以下发布的错误消息

错误信息:

assignment are not expressions kotlin and only expression are allowed

请查看下面发布的代码,请告诉我如何修复它

代码

lateinit var initCommRequestService : Single<CommunicationRequestService>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setupCommRequestService()
        .map {
            it.getAllPhotos()
        }

}

fun setupCommRequestService() : Single<CommunicationRequestService> {
    return initCommRequestService = CommunicationRequestService.initRetrofit(this@MainActivity)!!
}
}
4

2 回答 2

1

为了扩展 Egor 的答案,这个问题与lateinit其他东西没有真正的联系,只是在 Kotlin 中赋值不是表达式,所以x = y是语句而不是表达式。鉴于return需要一个表达式(或者根本没有,如果跳出返回的函数/方法Unit),return x = y这是不允许的,因为从语法的角度来看这是错误的。

请注意,在 Java 中这是允许的。

正如其他人所说,修复包括拆分两条指令:

val x = y
return x
于 2019-07-10T13:10:24.450 回答
0
fun setupCommRequestService(): Single<CommunicationRequestService> {
  initCommRequestService = CommunicationRequestService.initRetrofit(this@MainActivity)!!
  return initCommRequestService
}
于 2019-07-10T11:05:35.313 回答