let
结构:fun <T, R> T.let(block: (T) -> R): R = block(this)
返回值:闭包形式返回
是否为扩展函数:是
当前对象指代:it
应用场景:一般用于判空
with
结构:fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
返回值:闭包形式返回
是否为扩展函数:否
当前对象指代:this或省略
应用场景:重复调用一个对象的多个方法时,比如RecyclerView中ViewHolder赋值的时候
run
结构:fun <T, R> T.run(block: T.() -> R): R = block()
返回值:闭包形式返回
是否为扩展函数:是
当前对象指代:this或省略
应用场景:let应用场景+with应用场景
apply
结构:fun T.apply(block: T.() -> Unit): T { block(); return this }
返回值:this (链式调用)
是否为扩展函数:是
当前对象指代:this或省略
应用场景:
- let应用场景+with应用场景+run应用场景
- 初始化一个对象时,操作对象属性,并最终返回这个对象。
- 动态inflate出一个XML的View的时候需要给View绑定数据也会用到.
- 可用于多个扩展函数链式调用
- 数据model多层级包裹判空处理的问题
also
结构:fun T.also(block: (T) -> Unit): T { block(this); return this }
返回值:this (链式调用)
是否为扩展函数:是
当前对象指代:it
应用场景:let应用场景 + 多个扩展函数链式调用