重点介绍let,apply,run,with,repeat这几个。
let
默认当前这个对象作为闭包的it参数,返回值是函数里面最后一行,或者指定return
"Hellow World".let {
println(it)
if(it.length > 5){
println("太长了")
return 1
}else{
println("短了")
return 2
}
}
apply
调用某对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象
ArrayListL<String>.apply{
add("1")
add("666")
println(this)
}
run
run函数和apply函数很像,只不过run函数是使用最后一行的返回,apply返回当前自己的对象。
var length = "Hellow World".run{
concat("haha") println(length()) length }
with
with函数是一个单独的函数,并不是Kotlin中的extension,所以调用方式有点不一样,返回是最后一行,然后可以直接调用对象的方法,感觉像是let和apply的结合。
with(textView){
text = "666"
textColor = Color.YELLOW
textSize = sp(14f).toFloat()
}
repeat
传入一个Int型参数,根据参数在代码块内执行几次,参数是几就执行几次。
repeat(6){
println("Hello World")
}
总结:
函数名 | 定义 | block参数 | 返回值 | extension |
---|---|---|---|---|
let | fun T.let(f: (T) -> R): R = f(this) | it | 闭包返回 | 是 |
apply | fun T.apply(f: T.() -> Unit): T | 无,可以使用this | Unit | 是 |
run | fun T.run(f: T.() -> R): R | 无,可以使用this | Any | 是 |
with | fun with(receiver: T, f: T.() -> R): R = receiver.f() | 无,可以使用this | 闭包返回 | 否 |
repeat | fun repeat(times: Int, action: (Int) -> Unit) | 无 | 闭包返回 | 否 |