swift 基础学习(7) - 闭包

本文深入讲解Swift中的闭包概念,包括其与Objective-C中block的区别,应用场景如异步执行、控制器间及自定义视图的回调。通过实例演示了不同类型的闭包,如无参数无返回值、带参数无返回值、带参数有返回值以及无参数有返回值的闭包,并展示了闭包在实际项目中的具体应用。
摘要由CSDN通过智能技术生成
        // 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)
        }

 

转载于:https://my.oschina.net/iOScoderZhao/blog/877441

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值