1. 程式人生 > 程式設計 >Kotlin 使用Lambda來設定回撥的操作

Kotlin 使用Lambda來設定回撥的操作

使用Kotlin的Lambda表示式,我們可以拋棄回撥介面的使用。只需設定希望後面會被呼叫的函式即可。

示例如下

新建一個Kotlin類

class MyBean {

  fun testcallback1(callback: (String) -> Unit) {
    callback.invoke("這是回撥的內容")
  }

  fun testcallback2(value1: Int,value2: Int,callback: (Int,Int) -> Int): Int {
    var result = callback.invoke(value1,value2)
    return result * 3
  }
}

進行呼叫

class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    var bean = MyBean()
    bean.testcallback1 { m -> toast(m) }

    val result = bean.testcallback2(1,2,{ value1,value2 -> value1 + value2 })
    toast("計算結果" + result.toString())
  }
} 

最後顯示的結果

testcallback1的toast顯示為: "這是回撥的內容"
testcallback2將value1和value2相加,最後再乘以3,故toast顯示為9

補充知識:kotlin 定義介面並實現回撥

開發環境 android studio 3.0.1 已支援 kotlin

1、定義介面

interface CallBack{
  fun callBack(info : String)
}

2、實現介面 : 為繼承\實現

class CallBacks : CallBack{
  override fun callBack(info : String){
    Log.d("MainApp","current info $info")
  }
}

或者

private var mCallBack = object : CallBack{
  override fun callBack(info : String){
    Log.d("MainApp","current info $info")
  }
}

3、定義帶回調方法的函式

private fun initData(callBack : CallBack):Boolean{
  callBack?.callBack("我來自回撥")
  return true
}

4、實現回撥,呼叫方式與實現介面對應

initData(CallBacks())

或者

initData(mCallBack)

列印結果:

Kotlin 使用Lambda來設定回撥的操作

以上這篇Kotlin 使用Lambda來設定回撥的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。