参考自 Kotlin系列之let、with、run、apply、also函数的使用 个人简略总结
一、lambda回调函数
用于只有一个回调方法的接口
mView.setOnClickListener{
//todo
}
二、作用域函数let
用于判断变量非空后的作用域使用,返回值为最后一行
privat var intent:Intent?=null
val value:String? = intent?.let{
it.putExtra("key1","value")
it.putExtra("key2","value")
getStringExtra("key")
}
三、作用域函数with
用于调用同个类的多个方法,免去类名直接调用
with(intent){
getStringExtra("key",value)
putExtra("key1","value")
}
四、作用域函数run
let和with的混合体
privat var intent:Intent?=null
intent?.run{
getStringExtra("key",value)
putExtra("key1","value")
}
五、作用域函数apply
用于返回需要对象实例初始化的对象本身,函数块内免去类名直接调用
同时用于多层级判断非空操作
//用于返回需要对象实例初始化的对象本身
val intent = Intent().apply{
putExtra("key1","value")
putExtra("key2","value")
}
//用于多层级判断非空操作
carBean?.apply{
// carBean不为空时操作carBean
}.engine?.apply{
// engine不为空时操作engine
}.valve?.apply{
// valve不为空时操作valve
}
六、作用域函数also
和let相同,区别在于返回值为当前对象,用于多个扩展函数链式调用
carBean.also{
engine = Engine().apply{
valve = "valve version"
}
}.engine.also{
// 对valve进行操作,并返回engine对象
}