在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")
}
```
複製代碼