在Kotlin上面,提供了很多能够帮助快速开发的方法。学习了以后发现,有这些方法,真的是太方便了。 能够看下,若是你们发现有什么可使用到的地方,尽管告知,一块儿学习,一块儿进步。bash
内联扩展函数之run。直接访问对象的属性和方法,省去重复引用对象。app
fun main(args: Array<String>) {
val user = User("Kotlin", 1)
val result = user.run {
println("my name is $name, I am $age years old.")
1000
}
println("result: $result")
}
item.run {
//直接访问item的属性和方法,避免方法的重复
holder.tv?.setText(name)
holder.ageTv?.setText(age.toString())
}
复制代码
内联扩展函数之let,当调用的对象不为null时才进行{}里面的作法。 定义:let扩展函数的其实是一个做用域函数,当你须要去定义一个变量在一个特定的做用域范围内,let函数另外一个做用就是能够避免写一些判断null的操做。函数
eg:
object?.let{//表示object不为null的条件下,才会去执行let函数体,注意有个?号在哦
//it.todo()//其中,it会用来表明object
}
复制代码
经常使用的场景就是使用let函数处理须要针对一个可null的对象统一作判空处理,或者须要去明确一个变量所处特定的做用域范围内。布局
内联函数之with,返回的是传入的对象自己。 定义:它接收一个对象和一个扩展函数做为它的参数,而后使这个对象扩展这个函数。 这表示全部咱们在括号中编写的代码都是做为对象(第一个参数)的一个扩展函数,咱们能够就像做为this同样使用全部它的public方法和属性,能够省去类名重复,直接调用类的方法便可,例如RecyclerView中onBinderViewHolder中,须要对某个对象作统一的处理。学习
val result = with(person) {
println("my name is $name, I am $age years old")
1000
}
with(item){
holder.tv?.setText(name)//直接访问item的属性和方法
holder.ageTv?.setText(age.toString())
}
复制代码
内联扩展函数之apply,apply函数的返回的是传入对象的自己。 apply通常用于一个对象实例初始化的时候,须要对对象中的属性进行赋值。例如inflate出一个XML布局时候须要给View须要统一作处理,或者开发中会有一些数据model向View model转化实例化的过程当中须要用到。ui
mSheetDialogView = View.inflate(activity, R.layout.biz_exam_plan_layout_sheet_inner, null).apply{
course_comment_tv_label.paint.isFakeBoldText = true
course_comment_tv_score.paint.isFakeBoldText = true
course_comment_tv_cancel.paint.isFakeBoldText = true
course_comment_tv_confirm.paint.isFakeBoldText = true
course_comment_seek_bar.max = 10
course_comment_seek_bar.progress = 0
}
复制代码
内联扩展函数之also,返回的是传入的对象自己。和let差很少。this
val result = "testLet".also {
println(it.length)
1000
}
println(result)
复制代码
repeat函数: 重复执行一段代码的次数。例如,我要打印3次Hello world,就以下:spa
repeat(3) {
println("Hello world")
}
```
复制代码