Her*_*t74 0 foreach lambda kotlin
我的 MVP Presenter 与 onResume 中的视图绑定,这样可以保证解除绑定。这意味着有时,例如当数据来自 onActivityResult() 时,视图未绑定,但我们仍然希望触摸视图,以显示进度等。到目前为止,我为此使用了一个标志并在bindView() 或 updateView() 中,当视图绑定时调用。
现在我正在使用 Kotlin,所以我想如果我在 BasePresenter 中使用 lambda 列表会怎样?这是我到目前为止所拥有的:
typealias AnyLambda = () -> Unit
private val deferredActions = mutableListOf<AnyLambda>()
private val funShowProgress : () -> Unit = {
view()?.showProgress() }
override fun updateView() {
deferredActions.forEach { anyLambda ->
anyLambda()
deferredActions.remove(anyLambda)
}
}
fun onSomethingFromActivity(x: List<Y>) {
...
deferredActions.add { funShowProgress }
}
Run Code Online (Sandbox Code Playgroud)
问题是 lambda 没有在 forEach 中调用。如果我在 lambda 中添加 funShowProgress() ,它就会起作用。另外,lambda 也在那里,因为它在 forEach 中只运行一次,但不会调用 view.showProgress() 。我对 lambda 做错了什么?
请注意,虽然我可以直接从视图调用 showProgress(),但我想避免这种情况。
您的add调用是错误的:它添加了一个 lambda,该 lambda 计算funShowProgress表达式但没有任何结果(它不调用 lambda)。使用以下任一方法:
add { funShowProgress() }
Run Code Online (Sandbox Code Playgroud)
或者简单地
add(funShowProgress)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |