前言
Kotlin
是一种在Java
虚拟机上运行的静态类型编程语言,被称之为Android
世界的Swift
,在Google
I/O2017中,Google
宣布Kotlin
成为Android
官方开发语言
作用域函数使我们很频繁使用的函数,它的作用是形成一个特定对象的作用域,可以简化我们的代码逻辑,提高开发效率
let
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
顶层函数,返回值为lambda表达式的执行结果
常用方式: 非空对象执行代码块,使用it
引用对象
context?.let {
//当context不为null是执行此代码块
addView(TextView(it))
addView(ImageView(it))
}
with
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return receiver.block()
}
顶层函数,返回值为lambda表达式的执行结果
常用方式,用于 一组对象的连续调用,使用this
引用对象
service.setModel("None")
service.setLogLevel(LogLevel.E)
service.init(ID)
//使用with
with(service){
setModel("None")
service.setLogLevel(LogLevel.E)
service.init(ID)
}
also
public inline fun <T> T.also(block: (T) -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block(this)
return this
}
顶层函数,返回值为当前调用对象
常用方式,用于对象的 附加操作,使用it
引用对象
fun getResposne(){
...
return response.also{
Log.e("mike","--$it--")
}
}
apply
public inline fun <T> T.apply(block: T.() -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
return this
}
顶层函数,返回值为当前调用对象
常用方式,用于对象的 配置,使用this
引用对象
fun getResposne(){
...
return response.apply{
code = 200
value = "Success!"
}
}
总结
let
作用域内操作对象为it
,返回lambda
表达式的执行结果,主要用于对象判空的场景
with
作用域内操作对象为this
,返回lambda
表达式的执行结果,主要用于一组连续对象调用的场景
also
作用域内操作对象为it
,返回当前对象,主要用于执行附加操作的场景
apply
作用域内操作对象为this
,返回当前对象,主要用于对象的配置场景
注意事项
val status = 1
if (status == 1) {
Log.e("mike", "--one--")
} else if (status == 2) {
Log.e("mike", "--two--")
} else {
Log.e("mike", "--else--")
}
//结果打印 one
if (status == 1) {
"one"
} else if (status == 2) {
"two"
} else {
"else"
}.let {
Log.e("mike", "--$it--")
}
//结果没有日志输出
欢迎关注Mike的简书
Android知识整理