美文网首页
kotlin高阶函数

kotlin高阶函数

作者: 雨来 | 来源:发表于2021-06-07 14:03 被阅读0次
    理解的意思

    所谓的高阶函数 也就是我们定义的函数中可以再接收一个函数做为参数 像是一个lambda表达式一样 (像函数,像有接收者的函数字面量)

    1、一个简单的测试
    class TwoActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_two)
    //        val real:String? = null
    //        cc(real?:"cba")
            invokeMethod("雨来"){
    
                invokeBlock()
            }
        }
    
        fun invokeBlock(){
    
            println("invode block")
        }
    
    
    //    fun cc (str:String?): Unit {
    //
    //        println("方法执行了")
    //        println(str)
    //    }
    
        fun invokeMethod(userName:String, block:Int.()->Unit){
            println(userName)
            1.block()
        }
    
    }
    

    我们可以看出 invokeMethod 方法的最后一行 1.block()我调用了这个参数block方法 一般我们在这里可以做一定的逻辑 来判断它是否执行 不然的话
    调用下面 invokeBlock() 是不会得到执行的

     invokeMethod("雨来"){
    
                invokeBlock()
            }
    
    2、实际项目中的使用

    一个网络请求异常有错误的时候的例子

     fun loadFailed(msg: String?) {
            super.loadFailed(msg)
            showLoadErrorView(msg?: GlobalUtil.getString(R.string.unknown_error)) {
                startLoading() //这个方法只有在被出发的时候才会被执行
            }
        }
    

    只有 it?.block() 被调用的时候 startLoading()方法才会被执行

     /**
         * 当Fragment中的加载内容服务器返回失败或网络异常,通过此方法显示提示界面给用户。
         *
         * @param tip 界面中的提示信息
         * @param block 点击屏幕重新加载,回调处理。
         */
        protected fun showLoadErrorView(tip: String, block: View.() -> Unit) {
            if (loadErrorView != null) {
                loadErrorView?.visibility = View.VISIBLE
                return //这个return 后 实现block的方法不会得到执行
            }
            if (rootView != null) {
                val viewStub = rootView?.findViewById<ViewStub>(R.id.loadErrorView)
                if (viewStub != null) {
                    loadErrorView = viewStub.inflate()
                    val loadErrorText = loadErrorView?.findViewById<TextView>(R.id.loadErrorText)
                    loadErrorText?.text = tip
                    val loadErrorkRootView = loadErrorView?.findViewById<View>(R.id.loadErrorkRootView)
                    loadErrorkRootView?.setOnClickListener {
                        //显示出来后在这里设置监听肯定会走这个方法
                        it?.block() //执行调用处的block的方法
                    }
                }
            }
        }
    
    

    相关文章

      网友评论

          本文标题:kotlin高阶函数

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