分享一些Kotlin可以加快开发速度的小方法

1,374 阅读1分钟

1.巧用apply、let、with等函数

比如实例化一个对象并赋值

startActivity(Intent(activity, XXXActivity::class.java).apply {
                putExtra("XX", XXX)
                 putExtra("XX", XXX)
            })

2.扩展函数 (命名参数 默认参数 ) 简直不要太方便 简单例子:直接给imageView 赋予加载图片的能力 如下

fun ImageView.load(url: String?) {
    Glide.with(context).load(url).into(this)
}

使用方式

iv_head.load("https://ss0.bdstatic.com/70cFuhy/it/u=118307,42535&fm=26&gp=0.jpg")

再比如:简化网络请求

fun <T> Observable<ResponseBean<T>>.get(context: Context = AppManager.getInstance().currentActivity, isShowDialog: Boolean = false, message: String? = "请稍候", title: String? = null, next: (T?) -> Unit) {
//一系列参数 
    this.compose(RxHttpUtil.handleResult<T>(context as LifecycleOwner))
            .subscribe(object : MySubscriber<T>(if (isShowDialog) context else null, message, title) {
                override fun onSucess(t: T?) {
                    next(t) //回调
                }

            })

}

一个网路请求使用方式就变成了这样

Retrofit.apiService.login.get{ //it:(Loginbean)
    todo something   
}
Retrofit.apiService.login.get(isShowDialong=true,title="提示"){ //it:(Loginbean)
    todo something   
}
网上有一系列扩展函数工具合集 具体可以去GitHub找一下

3.高阶函数/闭包

比如之前使用activity/fragment通信最常用的是定义接口 viewmodel/livedata也行 从定义接口 再实现 再强转 判空一系列操作真的好麻烦 使用koltin 可以这样

class TestFragment() : BaseFragment() {
    lateinit var next: (String) -> Unit //一个函数当做变量传入

    companion object {
        fun getInstance(next: (b: String) -> Unit): TestFragment {
            val fragment = TestFragment()
            fragment.next = next
            return fragment
        }
    }
    
    fun sendMessageToActivity(){
        next("传个值过来")
    }
}

//activity这边
class TestActivity : BaseMvcActivity() {

    var mFramgent: TestFragment = TestFragment.getInstance {
                                                    //    it:string 
        todoSomething(it) 
    }
    
}

4.date数据类 Lambda等等

data  class(var id:String)

  mAdapter.setOnItemClickListener { adapter, view, position ->
         
     }

5.一些类似rxjava操作符的函数 比如

集合类的一些常用操作
Iterable.map  Iterable.flatmap  Iterable.filter ....等等