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 ....等等