美文网首页
kotlin 标签-例子退出循环

kotlin 标签-例子退出循环

作者: 牵手生活 | 来源:发表于2023-05-19 11:07 被阅读0次

标签是一个非常好用的东西。他可以让我们在多循环嵌套的情况下,进行穿插处理。不会像java一样,continue,break只能针对当前循环。那么让我们来体验下标签吧。

  • 标签介绍:
    在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签。 要为一个表达式加标签,我们只要在其前加标签即可。

-例子1 外面一个while循环、里面一个for循环 ,语句表现postTask @ 在for循环,那么break@postTask 退出的循环就是for

fun checkAndUploadUnFinishPublish(emqxManager: EmqxManager) {
        val publishTaskDao = db.publishTaskDao()
        GlobalScope.launch(dbExecutor) {
            checkAndDeleteData()
            var unFinishedTask = publishTaskDao.getUnFinishedTaskSuspend(1)
            Log.i(TAG, "unFinishedTask[${unFinishedTask.size}]")
            while (unFinishedTask.isNotEmpty() && emqxManager.isConnected && isActive) {
                postTask@for (publishTask in unFinishedTask) {
                    val result = runBlocking {
                        return@runBlocking withContext(Dispatchers.Main) {
                            val success = emqxManager.publishmessageplusFromDb(publishTask)
                            Log.i(TAG, "rePublish[${success}]: ${AppUtil.gson.toJson(unFinishedTask)}")
                            if (success){
                                publishTask.isDone = true
                                publishTaskDao.updateSuspend(publishTask)
                            }
                            return@withContext success
                        }

                    }
                    if (!result){
                        break@postTask  //推出for循环
                    }
                }
                delay(200)
                unFinishedTask = publishTaskDao.getUnFinishedTaskSuspend(1)
            }
        }
    }

例子2

fun labelDemo(){
    val intArr = intArrayOf(0,1,2)
    val intArr2 = intArrayOf(0,1,2)
    Log.i(TAG,"start for")
    intArrFor@for (int in intArr){ //第一个for循环
        Log.i(TAG,"for intArr int : $int")
        intArr2For@for (int2 in intArr2){  //第2个for循环
        // 每一次退出,回到intArrFor
            if(int2 == 1) break@intArrFor  //退出第一个for循环
            Log.i(TAG,"for intArr2 int2 : $int2")
        }
    }
    Log.i(TAG,"end for")
}

相关文章

网友评论

      本文标题:kotlin 标签-例子退出循环

      本文链接:https://www.haomeiwen.com/subject/bzagsdtx.html