美文网首页
2.Kotlin常用API

2.Kotlin常用API

作者: 枫叶栈 | 来源:发表于2019-08-20 18:46 被阅读0次

let

let 实在是一个简单的函数,它可以被任何对象调用。它接收一个函数(接收一
个对象,返回函数结果)作为参数,作为参数的函数返回的结果作为整个函数的返
回值。它在处理可null对象的时候是非常有用的,下面是它的定义:

inline fun <T, R> T.let(f: (T) -> R): R = f(this)

它使用了两个泛型类型: T 和 R 。第一个是被调用者定义的,它的类型被函数
接收到。第二个是函数的返回值类型。

with

with 接收一个对象和一个函数,这个函数会作为
这个对象的扩展函数执行。这表示我们根据推断可以在函数内使用 this 。

inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f
()

泛型在这里也是以相同的方式运行: T 代表接收类型, R 代表结果。如你所见,
函数通过 f: T.() -> R 声明被定义成了扩展函数。这就是为什么我们可以调
用 receiver.f() 。

apply

它看起来于 with 很相似,但是是有点不同之处。 apply 可以避免创建builder的
方式来使用,因为对象调用的函数可以根据自己的需要来初始化自己,然
后 apply 函数会返回它同一个对象:

inline fun <T> T.apply(f: T.() -> Unit): T { f(); return this }

这里我们只需要一个泛型类型,因为调用这个函数的对象也就是这个函数返回的对象。
一个不错的例子:

val textView = TextView(context).apply {
text = "Hello"
hint = "Hint"
textColor = android.R.color.white
}

它创建了一个 TextView ,修改了一些属性,然后赋值给一个变量。一切都很简
单,具有可读性和坚固的语法。

参考文献:

《kotlin-for-android-developers-zh》

相关文章

网友评论

      本文标题:2.Kotlin常用API

      本文链接:https://www.haomeiwen.com/subject/ymkmsctx.html