gpt4 book ai didi

android - Kotlin:是否可以在函数中传递两个 'this'?

转载 作者:行者123 更新时间:2023-12-02 13:17:32 24 4
gpt4 key购买 nike

使用下面的代码,我得到以下错误:“挂起函数'getSomethingFromAPI'应该仅从协程或另一个挂起函数中调用。”。 getSomethingFromAPI确实是ViewModel的暂停函数。

    override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(CallVM::class.java)

viewModel.applyLaunch {
this.getSomethingFromAPI()
}
}

fun <T: ViewModel> T.applyLaunch(block: T.() -> Unit)
= apply { viewModelScope.launch(Dispatchers.IO) { block() } }

如您所见,在applelaunch函数中,我正在协程(启动)内部执行getSomethingFromAPI,但是此信息丢失了。有什么办法可以保留它,并同时将T保留为ViewModel?

更具体地说,是否可以具有实现以下代码的前两行的快捷方式功能?
        viewModel.apply {
viewModelScope.launch(Dispatchers.IO) {
getSomethingFromAPI()
}

上面的getSomethingFromAPI会同时看到“this”(ViewModel和协程)。

我知道拥有它并不重要,但是了解创建DSL可能是一件好事。

最佳答案

之所以出现此错误,是因为您试图在非暂停的lambda中调用暂停函数。在apply中设置lambda启动暂停block: suspend T.() -> Unit

关于android - Kotlin:是否可以在函数中传递两个 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62443076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com