这里不允许“返回”:Kotlin Coroutine启动(UI)块

时间:2018-07-17 05:05:55

标签: kotlin kotlin-android-extensions kotlinx.coroutines

fun onYesClicked(view: View) {

    launch(UI) {
        val res = post(context!!,"deleteRepo")

        if(res!=null){
            fetchCatalog(context!!)
            catalogActivityCatalog?.refresh()
        }
    }
}

以上代码运行正常。我想通过返回(从而停止执行)if res == null来避免if中的嵌套部分,

fun onYesClicked(view: View) {

    launch(UI) {
        val res = post(context!!,"deleteRepo")

        if(res==null)return                  //this line changed <---A

        fetchCatalog(context!!)              //moved outside if block
        catalogActivityCatalog?.refresh()    //moved outside if block
    }
}

它说当我在<-A

所示的行中使用return时,此处不允许使用“ return”

这里是否有关键字退出launch块? 在这里可以使用替代返回的替代方法是什么?

2 个答案:

答案 0 :(得分:5)

退货目的地必须使用return@...

指定
fun onYesClicked(view: View) {

    launch(UI) {
        val res = post(context!!,"deleteRepo")

        if(res==null)return@launch     //return at launch

        fetchCatalog(context!!)              
        catalogActivityCatalog?.refresh()    
    }
}

答案 1 :(得分:2)

您必须创建一个标签,在该标签上应用return语句,例如return@label

fun onYesClicked(view: View) {

    label@launch(UI) {
        val res = post(context!!,"deleteRepo")

        if(res==null) return@label                   //this line changed <---A

        fetchCatalog(context!!)              //moved outside if block
        catalogActivityCatalog?.refresh()    //moved outside if block
    }
}

这是Kotlin从lambda返回的方式。