赞
踩
Kotlin标准库函数let可用于范围确定和空检查。当调用对象时,let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。
let扩展函数源码
let.kt文件代码
fun main() { println("isEmpty = $isEmpty") printNonNull(null) printNonNull("my string") printIfBothNonNull("First","Second") //下面是运行结果 //test //isEmpty = false //Printing "null": //Printing "my string": // my string // //First : Second } val isEmpty = "test".let { println(it) // 2 it.isEmpty() } fun printNonNull(str:String?){ println("Printing \"$str\":") str?.let { print("\t") println(it) println() } } fun printIfBothNonNull(strOne: String?, strTwo: String?) { strOne?.let { firstString -> strTwo?.let { secondString -> println("$firstString : $secondString") println() } } }
运行结果
与let类似,run是标准库中的另一个作用域函数。基本上,它做同样的事情:执行一个代码块并返回其结果。
不同的是,在内部运行对象是通过this访问的。当您想要调用对象的方法而不是将其作为参数传递时,这是很有用的。
run扩展函数源码
run.kt文件代码
fun getNullableLength(ns: String?) { println("for \"$ns\":") val resutl = ns?.run { println("\tis empty? " + isEmpty()) println("\tlength = $length") length }//返回最后一行 println("resutl = $resutl") } fun main(){ getNullableLength(null) getNullableLength("") getNullableLength("some string with Kotlin") //下面是运行结果 //for "null": //resutl = null //for "": // is empty? true // length = 0 //resutl = 0 //for "some string with Kotlin": // is empty? false // length = 23 //resutl = 23 }
运行结果
With是一个非扩展函数,可以简洁地访问其参数的成员:在引用其成员时,可以省略实例名。
with函数源码
with.kt文件代码
fun main() { val personal = Personal("test", 20) val withResult = with(personal) { println("name = $name") println("age = $age") 21 22 } println("withResult = $withResult") //name = test //age = 20 //withResult = 22 } class Personal(var name: String, var age: Int)
运行结果
apply在对象上执行代码块并返回对象本身。在块内部,对象被this引用。这个函数对于初始化对象很方便。
在实际项目用来显示列表数据的RecyclerView.Adapter里onBindViewHolder方法里使用apply或with函数较多
apply扩展函数源码
apply.kt文件代码
fun main() { val jake = Person() val stringDescription = jake.apply { name = "Jake" age = 30 about = "Android developer" }.toString() println("stringDescription = $stringDescription") //stringDescription = Person(name=Jake, age=30, about=Android developer) } class Person() { var name: String? = null var age: Int = 20 var about: String? = null override fun toString(): String { return "Person(name=$name, age=$age, about=$about)" } }
运行结果
它也像apply一样工作:它执行一个给定的块并返回被调用的对象。在块内部,对象被它引用,所以它更容易作为参数传递。这个函数可以方便地嵌入其他操作,比如在调用链中登录。
also扩展函数源码
also.kt文件代码
fun main() { val jake = Person2().also { println(it) } getPerson().also { it.token?.let { tempToen -> login(tempToen) } } } class Person2( var name: String = "test", var age: Int = 0, var about: String? = null ) { var token: String? = null override fun toString(): String { return "Person(name=$name, age=$age, about=$about)" } } fun login(toke: String) { } fun getPerson(): Person2 = Person2()
运行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。