kotlin扩展函数简化代码

kotlin的扩展函数可以大大的简化项目代码,下面我就把我项目中用到的一些实际的扩展列举一下,对不熟悉kotlin扩展函数的可以先了解一下~

一、ARouter简化

首先分析一下最常见的ARrouter跳转

                ARouter.getInstance()//每次都得写,这行代码我不关心
                    .build("/xx/xx")
                    .navigation()//每次都得写,这行代码我也不关心,可以优化

编写扩展函数(有点像普通封装的方法。。)

import com.alibaba.android.arouter.launcher.ARouter

fun go(path: String) {
    ARouter.getInstance().build(path).navigation()
}

使用,只需要把写好的扩展方法导入进来即可

import com.xxx.extention.go
class Test{
    fun initView() {
        go("/xx/xx")
    }
}

如果需要传参数怎么办?像这种

                ARouter.getInstance()
                    .build("/xx/xx")
                    .withString("key0", "value")
                    .withInt("key1", 666)
                    .withBundle("key2", Bundle())
                    .navigation()

还是经过分析可以得出,第一行和最后一行(如果不写result之类)重复,编写扩展函数

import com.alibaba.android.arouter.facade.Postcard
import com.alibaba.android.arouter.launcher.ARouter

fun go(path: String, func: Postcard.() -> Unit) = run {
    ARouter.getInstance().build(path).with {
        this.func()
    }.navigation()
}

private fun Postcard.with(func: Postcard.() -> Unit): Postcard = run {
    this.func()
    return this
}

使用

import com.xxxx.extention.go

class Test{

fun init(){
    go("/xx/xx") {
      withString("key0", "value")
      withInt("key1", 666)
      withBundle("key2", Bundle())
    }
  }
}

是不是清爽多了,当然,可以根据自己的需求进行封装。

二、Observer

我们使用MVVM写项目的时候,经常在activity中观察livedata数据的变化,如这种:

        viewModel.getName().observe(this, (Observer<String>) name -> {

        });

感觉java太啰嗦,里面的大部分代码都不是我们关心的,我们只关心,变量name和变化的name值,因此用kotlin扩展函数简化一下

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.observe

fun <T> LifecycleOwner.observe(liveData: LiveData<T>, observer: (t: T) -> Unit) {
    liveData.observe(this) {
        observer(it)
    }
}

ActivityFragment中使用

        observe(mViewModel.name) {
            println("name变化了:$it")
        }

是不是代码简洁多了?

。。。未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。