美文网首页我爱编程
Kotlin 高阶函数

Kotlin 高阶函数

作者: imkobedroid | 来源:发表于2018-06-07 11:23 被阅读0次

    最近在做项目的时候,发现很多代码都是复用的,这样不封装的话显得代码台臃肿,所以用到了kotlin的高阶函数来进行封装,这样代码很简介:
    例如有如下的需求:
    在一个闪屏页面进入的时候判断是否需要登陆,点击跳过倒计时进入与时间到了自动进入的唯一区别就是,点击跳过倒计时进入需要关闭handler来防止重复进入。

    关闭handler方法已经写好,像下边这样调用即可:

    countdown.stop()
    

    我们可以写一个包级方法如下,通过uid是否为空来进行是否跳转到登陆界面:

     fun splashToLogin(method:() -> Unit, context: Activity, uid:String?) {
             method()
    if(uid.isNullOrEmpty().not())context.startActivity<MainActivity()els e context.startActivity<LoginPasswordActivity>()
          context.finish()
        }
    

    可以看出其中传了三个参数,最后两个不用解释,第一个参数表示传递的是一个函数,并且这个函数没有参数,也没有返回值,方法里面是通过uid是否为空来进行跳转判断,并执行了method函数。
    在其他地方调用的方式如下:

      //倒计时完毕自动进入
       countdown.setOnFinishAction {
            splashLogin({}, this, uid)
        }
    
     //点击跳过倒计时进入,并且关闭handler发送
        countdown.setOnClickListener {
            splashLogin({ countdown.stop() }, this, uid)
        }
    

    拓展:

    kotlin强大的函数当参数传入还可以更简介的优化代码

    例如:我们需要调用一个方法,并且向里面传一个int类型的值,然后经过一系列操作得到一个string类型的值。在包级方法中可以这样写:

    fun funOne(method: (t:Int) -> String,x: Int):String{
              return method(x)
    }
    

    其中method函数就是一些列的变化操作,x就是我们传入的那个int值,最后返回一个string类型的值。

    调用的地方这样写到:

    funOne({"传入的int转换为string的结果为: $it"},1)
    

    上边是lambda表达式的形式,其实还可以用kotlin中的双冒号引用方式进行调用:

    funOne(this::method,1)
    
    fun method(i:Int):String{
       return "传入的int转换为string的结果为: $i"
    }
    

    这就相当于 我把1传进去,然后经过一个方法的一些列操作达到我们需要的值,这就是kotlin的强大之处,当然高阶函数并非这么简单,还有更多有意思的操作,后面遇到了再来更新。

    相关文章

      网友评论

        本文标题:Kotlin 高阶函数

        本文链接:https://www.haomeiwen.com/subject/hqowsftx.html