Kotlin中 takeIf 和 takeUnless 的一种使用场景

首先先来看看takeIf 和 takeUnless 的实现:

//takeIf
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? {
    ...
    return if (predicate(this)) this else null
}


//takeUnless
public inline fun <T> T.takeUnless(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 = UserCallback.address
textView.text = if (addr.isNullOrBlank()) "未设置" else addr

 

但使用takeIf 或 takeUnless 可以这样实现更为直接

textView.text = UserCallback.address.takeUnless { it.isNullOrBlank() }?:"未设置"

//或者使用takeIf的写法
//textView.text = UserCallback.address.takeIf { !it.isNullOrBlank() }?:"未设置"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值