gpt4 book ai didi

android - 使用 Retrofit 方法更具表现力

转载 作者:IT老高 更新时间:2023-10-28 13:27:31 25 4
gpt4 key购买 nike

我想做void enqueue(Callback<T> callback);方法调用代码块更具表现力,这是我通常拥有的

request.enqueue(object : Callback<MyModel> {
override fun onFailure(call: Call<MyModel>?, t: Throwable?) {
//
}

override fun onResponse(call: Call<MyModel>?, response: Response<MyModel>?) {
//
}
})

我想要的意思是,以更简洁的方式更改此代码块并删除那些 override, object, Callback 关键字并执行类似的操作:

request.enqueue({throwable, response -> })

我认为可以使用扩展和高阶函数以某种方式对其进行改进。有谁知道怎么做?

最佳答案

这就是我使用扩展函数和类的方法

fun<T> Call<T>.enqueue(callback: CallBackKt<T>.() -> Unit) {
val callBackKt = CallBackKt<T>()
callback.invoke(callBackKt)
this.enqueue(callBackKt)
}

class CallBackKt<T>: Callback<T> {

var onResponse: ((Response<T>) -> Unit)? = null
var onFailure: ((t: Throwable?) -> Unit)? = null

override fun onFailure(call: Call<T>, t: Throwable) {
onFailure?.invoke(t)
}

override fun onResponse(call: Call<T>, response: Response<T>) {
onResponse?.invoke(response)
}

}

那么你可以这样使用它

request.enqueue {

onResponse = {
// do
}

onFailure = {
// do
}

}

关于android - 使用 Retrofit 方法更具表现力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com