Как исправить назначение не являются выражениями kotlin и допускаются только выражения - PullRequest
1 голос
/ 10 июля 2019

ниже, я пытаюсь латинить переменную, как показано. Однако, после нескольких примеров в Интернете, я понял концепцию этого, но, тем не менее, я получил сообщение об ошибке ниже из-за код, указанный в методе 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 ]

1 голос
/ 10 июля 2019

Чтобы расширить ответ Егора, проблема на самом деле не связана с lateinit или другими вещами, просто в присваивании Kotlin нет выражения, поэтому x = y является утверждением, а не выражением.Учитывая, что return ожидает выражения (или вообще ничего, если выпрыгивает из функции / метода, возвращающего Unit), return x = y не допускается, поскольку это неправильно с грамматической точки зрения.

Обратите внимание, что в Java это будет разрешено.

Как уже говорили другие, исправление состоит в разделении 2 инструкций:

val x = y
return x
0 голосов
/ 10 июля 2019
fun setupCommRequestService(): Single<CommunicationRequestService> {
  initCommRequestService = CommunicationRequestService.initRetrofit(this@MainActivity)!!
  return initCommRequestService
}
...