Kotlin:如何将两个语句“应用”和“让”以一种很好的方式放在一起?
Posted
技术标签:
【中文标题】Kotlin:如何将两个语句“应用”和“让”以一种很好的方式放在一起?【英文标题】:Kotlin: how to put two statements "apply" and "let" together in a nice way? 【发布时间】:2021-12-13 08:30:21 【问题描述】:为了简单起见,我将坚持代码中的抽象。 因此,我正在编写一个函数,该函数仅在不为空时才采用一些可为空的颜色来设置它。我正在使用 Builder,代码如下所示:
private fun buildIcon(color: Color? = null) =
Icon.Builder()
.apply color?.let this.setColor(color)
它可以工作,但看起来有点难看,我如何将它变成一个语句,所以类似于 applyIfNotNull(color) this.setColor(it) ,但可能更简单,我只是想将这些语句合并为一个.我尝试像在how to implement an applyif for Kotlin? 中那样执行此操作,但无法使其工作。
【问题讨论】:
值得检查将颜色设置为null
是否有任何危害。 (例如,它可能会告诉图标从其容器继承颜色。) 如果没有,那么您可以省略检查并总是调用setColor()
。
它实际上是从资源创建图标,如果没有提供 setColor,你会得到默认颜色——这就是我们不向 buildIcon() 提供颜色时应该发生的情况。 setColor 函数也接受不可为空的参数,所以不是这样
【参考方案1】:
你可以像这样实现你的applyIfNotNull
函数:
inline fun <T, U> T.applyIfNotNull(value: U?, block: T.(U) -> Unit): T
if(value != null)
this.block(value)
return this
用法:
private fun buildIcon(color: Color? = null) =
Icon.Builder().applyIfNotNull(color) this.setColor(it)
您可以验证它here。
【讨论】:
这就是我想要的。我唯一要改变的是应用 = 而不是返回它,但它看起来不错以上是关于Kotlin:如何将两个语句“应用”和“让”以一种很好的方式放在一起?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 项目中添加两个或多个 kotlin 原生模块