如何解决分配不是表达式kotlin且仅允许表达式

时间:2019-07-10 11:01:29

标签: kotlin lazy-initialization kotlin-lateinit

在下面的

中,我试图如图所示延迟变量。但是,在网上浏览了一些示例后,我理解了它的概念,但是由于以下原因,我收到了以下发布的错误消息: 方法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)!!
}
}

2 个答案:

答案 0 :(得分:1)

要进一步扩展Egor的答案,问题实际上并没有与lateinit或其他东西相关,只是在Kotlin赋值中不是表达式,因此x = y是语句而不是表达式。 假设return期望一个表达式(或者如果返回到Unit的函数/方法之外根本没有表达式),那么就不允许使用return x = y,因为从语法的角度来看这是错误的。

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

正如其他人所说,此修复程序包括拆分2条指令:

val x = y
return x

答案 1 :(得分:0)

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