[Kotlin]View.OnClickListener在Kotlin中的進化

題記:

在kotlin中,調用函數時,如果參數為函數并且是最后一個參數,可以將參數移到括號外面。移動到括號外面之后如果括號內沒有參數,括號可以省略不寫。

View.OnClickListener的變身

Kotlin對Lambda的完美支持,讓我們寫單函數時有了極速的提升。
在Java中,對View添加一個點擊事件時是這樣寫的:

view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setVisibility(View.VISIBLE);
        ...
    }
});

而在Kotlin中我們使用它時,可以這樣:

view.setOnClickListener(object :View.OnClickListener{
    override fun onClick(v: View?) {
        v.visibility = View.VISIBLE    
        ...
    }
})

等等,這代碼量看起來好像跟Java也差不多吧,除了少了個;
別急,別急。這才是開始。根據lambda表達式規則:

?  Lambda表達一般使用“{ }”包圍。
?  它的參數(如果有的話)在“->”前定義,參數類型可能是省略的。
?  函數體跟在“->”后面。

我們可把上面的代碼簡化為:

view.setOnClickListener({ v ->
    v.visibility = View.VISIBLE    
    ...
})

根據如果參數為函數并且是最后一個參數,可以將參數移到括號外面。

view.setOnClickListener() { v ->
    v.visibility = View.VISIBLE    
    ...
}

根據移動到括號外面之后如果括號內沒有參數,括號可以省略不寫。你見到的是這個。

view.setOnClickListener { v ->
    v.visibility = View.VISIBLE    
    ...
}

根據若函數參數對應的函數只有一個參數,在使用時,可以省略參數定義,直接使用“it”代替參數,你最終看到的是這個。

view.setOnClickListener {
    it.visibility = View.VISIBLE
}

簡單吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容