我在FooClass
课堂上有这个功能:
fun foo(id: Int, listener: Listener<JsonElement>) {
enqueue(listener, apiService.getFoo(id))
}
Run Code Online (Sandbox Code Playgroud)
这是界面:
interface Listener<T> {
fun onSuccess(result: T?)
fun onFailure()
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给我时,我这样做:
FooClass().foo(id, object : FooClass.Listener<JsonElement> {
override fun onSuccess(result: JsonElement?) {}
override fun onFailure() {}
})
Run Code Online (Sandbox Code Playgroud)
我想在打电话时简化一个lambda.像这样的东西:
fun foo {id ->
// Perform onSuccess
// Perform onFailure
}
Run Code Online (Sandbox Code Playgroud)
我知道这是基本的,但我很乱...... :-(
非常感谢你的帮助.
你需要使用一些技巧.
typealias SuccessCallback<T> = (T?) -> Unit
typealias FailureCallback = () -> Unit
inline fun FooClass.foo(id: Int, crossinline success: SuccessCallback<JsonElement?>, crossinline failure: FailureCallback) {
foo(id, object: FooClass.Listener<JsonElement> {
override fun onSuccess(result: JsonElement?) = success(result)
override fun onFailure() = failure()
})
}
Run Code Online (Sandbox Code Playgroud)
现在你应该可以打电话了
FooClass().foo(id,
success = { result: JsonElement? ->
...
},
failure = {
}
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
126 次 |
最近记录: |