Kotlin開發 lambda開發


前言

  在體驗kotlin后,你一定會kotlin實現一些簡單的接口回調方法的lambda印象深刻。例如下面的代碼:

        val button = Button(this)
        button.setOnClickListener { 
            //在此處實現點擊邏輯
        }

這大大的減少了重復的模板代碼。提高了代碼的閱讀效率。所以,此篇博客講解我們如何實現這種lambda接口回調。

 

回調lambda

代碼

class MainActivity : AppCompatActivity() {
    private lateinit var listener: (String) -> Unit 

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setOnListener { textView.text = it }

        Handler().postDelayed(Runnable {
            listener.invoke("觸發成功")
        }, 1000)

    }

    fun setOnListener(str: (String) -> Unit){
        listener = str
    }
}

1.首先在創建一個延后初始化的全局變量 private lateinit var listener: (String) -> Unit

2.然后實現setOnListener方法

3.最后的重點是使用invoke發布數據,我這里使用了一個Handler模擬延遲的數據回調

 

其他

class FunTest {
    /**
     *   funTest.example { s, i -> println("$s $i") }
     */
    fun example(out: (String, Int) -> Unit) {
        out("11", 1)
    }

    /**
     * 非內聯函數
     *     funTest.example2 {if (it.isEmpty()) return@example2 }
     */
    fun example2(str: (String) -> Unit) {
        str.invoke("demo")
    }

    /**
     * 內聯函數
     *      funTest.example2_1 {if (it.isEmpty()) return}

     */
    inline fun example2_1(str: (String) -> Unit) {
        str.invoke("demo")
    }

    /**
     * funTest.example3( str1 = { println(it) }, str2 = { println(it)})

     */
    inline fun example3(str1: (String) -> Unit, str2: (String) -> Unit) {
        str1("str1")
        str2("str2")
    }
    
}

 

 

 

 

End


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM