I have this function on FooClass class:
fun foo(id: Int, listener: Listener<JsonElement>) {
enqueue(listener, apiService.getFoo(id))
}
This is the interface:
interface Listener<T> {
fun onSuccess(result: T?)
fun onFailure()
}
When I call it, I do this:
FooClass().foo(id, object : FooClass.Listener<JsonElement> {
override fun onSuccess(result: JsonElement?) {}
override fun onFailure() {}
})
I want to make a lambda to simplify when I make the call. Something like this:
fun foo {id ->
// Perform onSuccess
// Perform onFailure
}
I know this is basic, but I'm a mess... :-(
Thank you so much for the help.
You'll need to use some tricks for that.
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()
})
}
Now you should be able to call
FooClass().foo(id,
success = { result: JsonElement? ->
...
},
failure = {
}
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With