Kotlin:如何使用扩展功能延迟运行函数

Rik*_*zen 2 android postdelayed kotlin

我试图弄清楚如何使用扩展函数来延迟运行任何方法,但似乎无法搞清楚.

我尝试下面的东西,我有一个函数,我想要一个处理程序延迟执行一定的timeInterval:

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)}
Run Code Online (Sandbox Code Playgroud)

任何人?

Jor*_*nee 6

您应该将扩展名放在函数类型上,而不是Unit:

fun functionX() {}
fun functionY() {}

private fun (() -> Any).withDelay(delay: Int) {
     Handler().postDelayed(this , delay)
}
Run Code Online (Sandbox Code Playgroud)

用法:

::functionX.withDelay(500)
::functionY.withDelay(500)
Run Code Online (Sandbox Code Playgroud)

这里::functionX是对全局函数的引用functionX.


Sam*_*Sam 6

另一种方法是声明一个顶级(即全局)函数,如下所示:

fun withDelay(delay : Long, block : () -> Unit) {
    Handler().postDelayed(Runnable(block), delay)
}
Run Code Online (Sandbox Code Playgroud)

然后你可以从任何地方调用它,像这样:

withDelay(500) { functionX() }
Run Code Online (Sandbox Code Playgroud)