对于Kotlin来说还是很新的,如果我的活动为空,我试图不回调我的回调。 让我解释一下,我让我的DataManager对某些数据执行异步工作:
fun performWork(callback: ((param1: T, param2) -> Unit)?) {
// ... async work with data...
// Work is finished, let's call the callback :)
// as the callback is optional:
callback?.invoke(param1, param2)
}
所以我将我的DataManager调用到我的MainActivity中:
DataManager.performWork(callback = { param1, param2 ->
// update the UI now that the work is done.
}
我想做的是如果回调为空(这意味着活动为空,或者不再在屏幕上,则不会调用回调...)
所以在我的活动中我声明了一个可选的var:
var myCallback: ((params1: T, params2: T) -> Unit)? = null
然后我有一个功能:
var callbackMain: ((params1: T, params2: T) -> Unit)? = fun (params1: T, params2: T) {
print("ok")
}
然后当我调用我的DataManager时:
mainCallback = this.callbackMain
DataManager.performWork(mainCallback)
mainCallback = null
因此异步工作被调用...并且DataManager输入回调因为mainCallback不为空!我认为它的价值是callbackMain。 无论如何我可以让我的回调可以为空吗?所以它不会被调用,而我的DataManager不知道活动?
非常感谢您的帮助。
答案 0 :(得分:0)
您将mainCallback转移为函数performWork的参数。
执行此操作mainCallback = null
时,将mainCallback设为null
但是,函数中的param mainCallback仍然不会为空。
您需要做的是将回调注入DataManager,而不是作为函数的参数。然后,当您完成异步工作时,请调用mainCallback?.invoke()
如果要销毁回调,只需将DataManager中的回调设置为null。