Kotlin:如何使用扩展功能延迟运行函数
问题描述:
我想弄清楚如何使用扩展函数来延迟运行任何方法,但似乎无法弄清楚。Kotlin:如何使用扩展功能延迟运行函数
我想类似下面,我有一个功能,我想处理程序通过特定的时间间隔延迟执行:
functionX().withDelay(500)
functionY().withDelay(500)
private fun Unit.withDelay(delay: Int) {
Handler().postDelayed({this} , delay)}
private fun Handler.postDelayed(function:() -> Any, delay: Int) {
this.postDelayed(function, delay)}
有人吗?
答
你应该把扩展功能类型,不Unit
:
fun functionX() {}
fun functionY() {}
private fun (() -> Any).withDelay(delay: Int) {
Handler().postDelayed(this , delay)
}
用法:
::functionX.withDelay(500)
::functionY.withDelay(500)
这里,::functionX
是reference到名为functionX
全局函数。
答
例如,你可以声明全局变量,如:
private var handler: Handler = Handler()
private lateinit var runnableNewUrlBackground: Runnable
而且还声明该函数作为全球
init {
runnableNewUrlBackground = Runnable {
// Your function code here
myCustomFun();
}
}
然后,当你要调用此方法,只需使用:
handler.postDelayed(runnableNewUrlBackground, YOUR_DESIRED_TIME)
答
另一种方法是声明一个像这样的顶级(即全局)函数:
fun withDelay(delay : Long, block :() -> Unit) {
Handler().postDelayed(Runnable(block), delay)
}
然后就可以调用它,从任何地方,像这样:
withDelay(500) { functionX() }
答
或者我喜欢这个版本太:
你想裹任何代码块中{执行.. }
{ invokeSomeMethodHere() }.withDelay()
而且具有调用延迟一定时间后可运行的一个扩展函数:
fun <R> (() -> R).withDelay(delay: Long = 250L) {
Handler().postDelayed({ this.invoke() }, delay)
}