Kotlin 使用Lambda來設定回撥的操作
阿新 • • 發佈:2020-03-17
使用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來設定回撥的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。