美文网首页kotlin相关专题
kotlin扩展函数简化代码

kotlin扩展函数简化代码

作者: 言吾許 | 来源:发表于2020-09-07 14:11 被阅读0次

    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")
            }
    

    是不是代码简洁多了?

    。。。未完待续

    相关文章

      网友评论

        本文标题:kotlin扩展函数简化代码

        本文链接:https://www.haomeiwen.com/subject/ignkektx.html