回调函数
-
英文定义:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed
-
中文理解:回调函数被用作参数传到另一个主函数里面,当那个主函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调;
-
代码示例
//定义主函数,回调函数作为参数 function A(callback) { callback(); console.log('我是主函数'); } //定义回调函数 function B(){ setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作 } //调用主函数,将函数B传进去 A(B); //输出结果 我是主函数 我是回调函数
-
定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等
Kotlin中的回调函数
Kotlin回调函数-对于lambda的简化
- 在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lambda函数来代替。可以简化写一些不必要的嵌套回调方法。但是需要注意:在lambda表达式,只支持单抽象方法模型,也就是说设计的接口里面只有一个抽象的方法,才符合lambda表达式的规则,多个回调方法不支持
-
用Java代码实现一个接口的回调
mView.setEventListener(new ExamPlanHomeEventListener(){ public void onSuccess(Data data){ //todo } });
-
在Kotlin中的实现一个接口的回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法)
mView.setEventListener(object: ExamPlanHomeEventListener{ public void onSuccess(Data data){ //todo } });
-
如果在Kotlin中的对于接口只有一个回调的方法,就符合使用lambda函数,我们可以把以上代码简化成这样
mView.setEventListener({ data: Data -> //todo }) //或者可以直接省略Data,借助kotlin的智能类型推导 mView.setEventListener({ data -> //todo })
-
如果以上代码中的data参数没有使用到的话,可以直接把data去掉
mView.setEventListener({ //todo })
-
以上代码还可以做个调整,由于setEventListener函数最后一个参数是一个函数的话,可以直接把括号的实现提到圆括号外面
mView.setEventListener(){ //todo }
-
由于setEventListener这个函数只有一个参数,可以直接省略圆括号
mView.setEventListener{ //todo }