[Kotlin]View.OnClickListener在Kotlin中的進(jìn)化

題記:

在kotlin中,調(diào)用函數(shù)時(shí),如果參數(shù)為函數(shù)并且是最后一個(gè)參數(shù),可以將參數(shù)移到括號外面。移動(dòng)到括號外面之后如果括號內(nèi)沒有參數(shù),括號可以省略不寫。

View.OnClickListener的變身

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

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

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

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

等等,這代碼量看起來好像跟Java也差不多吧,除了少了個(gè);
別急,別急。這才是開始。根據(jù)lambda表達(dá)式規(guī)則:

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

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

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

根據(jù)如果參數(shù)為函數(shù)并且是最后一個(gè)參數(shù),可以將參數(shù)移到括號外面。

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

根據(jù)移動(dòng)到括號外面之后如果括號內(nèi)沒有參數(shù),括號可以省略不寫。你見到的是這個(gè)。

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

根據(jù)若函數(shù)參數(shù)對應(yīng)的函數(shù)只有一個(gè)參數(shù),在使用時(shí),可以省略參數(shù)定義,直接使用“it”代替參數(shù),你最終看到的是這個(gè)。

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

簡單吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容