Kotlin添加RxJava回调扩展方法

平时在开发中请求业务时一般返回数据的格式是固定的,在使用Java时我们一般会新建一个抽象类去继承RxJava的观察者,然后把相同的逻辑写在封装类中。但是网络请求一般有成功和失败两个回调,我们可能只需要用到一个回调方法,这时候我们可以用kotlin的方法参数和参数默认值封装,即使只传一个方法或者不传都不会有问题

fun <T> Observable<BaseBean<T>>.subscribeData(success: ((T?) -> Unit)? = null, fail: ((error: String?) -> Unit)? = null): Disposable =
    subscribe({
        if (200 == it.code) {
            success?.invoke(it.data)
        } else {
            fail?.invoke(it.msg)
        }
    }, {
        fail?.invoke(it.toString())
    })

fun <T> Observable<T>.subscribeOriginal(success: ((T) -> Unit)? = null, fail: ((error: String?) -> Unit)? = null): Disposable =
    subscribe({
        success?.invoke(it)
    }, {
        fail?.invoke(it.toString())
    })

业务数据结果

原始数据结果

这里需要注意一下空安全问题,在BaseBean里面,data的类型和结果未知,有可能为null,所以在使用泛型时要定义为可空类型,而在获取原始结果时android studio之所以没有显示?是因为BaseBean里面已经把data定义为可空类型。

推荐阅读更多精彩内容