前言
Kotlin是一種在Java虛擬機上運行的靜態(tài)類型編程語言,被稱之為Android世界的Swift,在GoogleI/O2017中,Google宣布Kotlin成為Android官方開發(fā)語言

作用域函數(shù)使我們很頻繁使用的函數(shù),它的作用是形成一個特定對象的作用域,可以簡化我們的代碼邏輯,提高開發(fā)效率
let
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
頂層函數(shù),返回值為lambda表達式的執(zhí)行結(jié)果
常用方式: 非空對象執(zhí)行代碼塊,使用it引用對象
context?.let {
//當context不為null是執(zhí)行此代碼塊
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()
}
頂層函數(shù),返回值為lambda表達式的執(zhí)行結(jié)果
常用方式,用于 一組對象的連續(xù)調(diào)用,使用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
}
頂層函數(shù),返回值為當前調(diào)用對象
常用方式,用于對象的 附加操作,使用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
}
頂層函數(shù),返回值為當前調(diào)用對象
常用方式,用于對象的 配置,使用this引用對象
fun getResposne(){
...
return response.apply{
code = 200
value = "Success!"
}
}
總結(jié)
let作用域內(nèi)操作對象為it,返回lambda表達式的執(zhí)行結(jié)果,主要用于對象判空的場景
with作用域內(nèi)操作對象為this,返回lambda表達式的執(zhí)行結(jié)果,主要用于一組連續(xù)對象調(diào)用的場景
also作用域內(nèi)操作對象為it,返回當前對象,主要用于執(zhí)行附加操作的場景
apply作用域內(nèi)操作對象為this,返回當前對象,主要用于對象的配置場景
注意事項
val status = 1
if (status == 1) {
Log.e("mike", "--one--")
} else if (status == 2) {
Log.e("mike", "--two--")
} else {
Log.e("mike", "--else--")
}
//結(jié)果打印 one
if (status == 1) {
"one"
} else if (status == 2) {
"two"
} else {
"else"
}.let {
Log.e("mike", "--$it--")
}
//結(jié)果沒有日志輸出
歡迎關(guān)注Mike的簡書
Android知識整理