Kotlin一些十分有用的方法(run、let、with、apply、also、repeat)

在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")
    }
    ```
複製代碼
相關文章
相關標籤/搜索