run { }
run {
使用子命名空间运行代码段
返回最后的对象结果
}
run {
if (firstTimeView) introView else normalView
}.show()
T.run { }
T.run {
this 指代 T 对象
可直接访问 T 对象内部成员
返回最后的对象结果
}
webview.settings?.run {
javaScriptEnabled = true
databaseEnabled = true
}
with(T) { }
with(T) {
this 指代 T 对象
可直接访问 T 对象内部成员
返回最后的对象结果
}
with(webview.settings) {
this?.javaScriptEnabled = true
this?.databaseEnabled = true
}
T.apply { }
T.apply {
this 指代 T 对象
可直接访问 T 对象内部成员
返回 T 对象本身
}
fun createInstance(args: Bundle)
= MyFragment().apply { arguments = args }
fun createIntent(intentData: String, intentAction: String) =
Intent().apply { action = intentAction }
.apply { data = Uri.parse(intentData) }
T.let { }
T.let {
默认 it 指代 T 对象
更显式区分调用 T 对象成员或外部变量
返回最后的对象结果
}
stringVariable?.let {
println("The length of this String is ${it.length}")
}
stringVariable?.let {
nonNullString -> // 使用 nonNullString 取代默认 it
println("The non null string is $nonNullString")
}
original.let {
println("The original String is $it") // "abc"
it.reversed() // evolve it as parameter to send to next let
}.let {
println("The reverse String is $it") // "cba"
it.length // can be evolve to other type
}.let {
println("The length of the String is $it") // 3
}
T.also { }
T.also {
默认 it 指代 T 对象
更显式区分调用 T 对象成员或外部变量
返回 T 对象本身
}
original.also {
println("The original String is $it") // "abc"
it.reversed() // even if we evolve it, it is useless
}.also {
println("The reverse String is ${it}") // "abc"
it.length // even if we evolve it, it is useless
}.also {
println("The length of the String is ${it}") // "abc"
}
T.takeIf { } / T.takeUnless { }
T.takeIf {
默认 it 指代 T 对象
要求返回一个 Boolean 值
函数根据返回的 Boolean 值决定最终返回 T 对象或 null
}
T.takeUnless {
函数返回值与 takeIf 相反
}
val date = Date().takeIf {
it.after(Date(2018 - 1900, 0, 1))
}
repeat(times) { }
repeat(times) {
重复执行该代码段 times 次
默认 it 指代当前执行次数
无返回值
}
参考资料:
Mastering Kotlin standard functions: run, with, let, also and apply
网友评论