swift 基础学习(7) - 闭包

// MARK: - 闭包
        /**
         闭包类似于 OC 的bock,但是比OC的block应用更广
         1,在OC 中block是匿名的函数
         2,在swift中 函数是特殊的闭包
         
         闭包的应用场景
         1,异步执行完成回调
         2,控制器间的回调
         3,自定义视图回调
         
         */
        /**
         闭包:
         1,提前准备好的代码
         2,在需要的时候执行
         3,可以当做参数传递
         4,注意self循环引用
         */
// 1 最简单的闭包
        // 类型()-》()没有参数,没有返回值的函数,可以连 in 省略
        let b1 = {
            print("hello")
        }
        // 执行闭包
        b1()
// 2 带参数的闭包
        // 闭包中的 参数,返回值 ,实现代码都是卸载{}中 {型参列表 -> 返回值  in   代码实现}
        // 注意: 需要使用关键字 “in” 分割定义和实现
        // (Int) -> () 有参无返回值
        let b2 = { (x: Int) -> () in
            print(x)
        }
        // 执行
        b2(100)
// 3 带参数,有返回值的闭包
        // (Int,Int) -> Int
        let b3 = { (x : Int,y : Int) -> Int  in
            return x + y
        }
        // 执行
        print(b3(10,110))
// 4 无参数,有返回值的闭包
        let b4 = { () -> String in 
            return "傻逼"
        }
        print(b4())
// 实例: 闭包的回调   
    func loadData(completion:@escaping (_ resoult: [String])->()) -> () {
        
        dispatchQueue.global().async {
            print("耗时操作,如网络请求 \(Thread.current)")
        }
        
        //模拟请求的数据
        let json = ["hah","adfa","dsfdf"]
        
        dispatchQueue.main.async {
            print("回到主线程更行UI\(Thread.current)")
            
            // 闭包作为参数的 调用
            completion(json)
        }
    }

// 调用
        loadData { (json) in
            print(json)
        }

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...