首先先来看看takeIf 和 takeUnless 的实现:
//takeIf
public inline fun <T> (predicate: (T) -> Boolean): T? {
...
return if (predicate(this)) this else null
}
//takeUnless
public inline fun <T> (predicate: (T) -> Boolean): T? {
...
return if (!predicate(this)) this else null
}
takeIf : 接收一个判断条件表达式,如果判断表达式为true则返回 对象本身,false返回 null
takeUnless: 与takeIf相反, 如果判断表达式为true则返回 null,false返回 对象本身
所以有这么一种场景可以使用,如请求后台返回了一个UserCallback对象,需要在界面显示这个UserCallback包含的一个address字符串,如果返回的address如果是null或空字符串则显示“未设置”。.
以前这种场景一般都是这样实现的:
val addr =
= if (()) "未设置" else addr
但使用takeIf 或 takeUnless 可以这样实现更为直接
= { () }?:"未设置"
//或者使用takeIf的写法
// = { !() }?:"未设置"