swift学习--闭包

闭包类似于oc中的block,用法基本类似!

oc中block为一种匿名的函数,而在swift中函数为特殊的闭包!

一、什么是闭包

1.提前准备好代码块

2.在需要的时候执行

3.可以当参数使用

二、闭包类型

//格式{形参列表 ->返回值类型 in//实现代码}

    //1.无参数闭包,当没有参数是可以省去in
        let clos = {
            print("hello")
        }
        //执行闭包
        print(clos);
        
        //2.带参数闭包,
        //闭包中,参数,返回值,实现代码都写在{}中
        //格式{形参列表 -> 返回值类型 in//实现代码}
        let clos2:(Int,Int) -> Int = {
            (x: Int ,y: Int) -> Int in
            return x + y
        }
        print(clos2(100,20));
        
        //闭包可以根据上下文推断参数和返回值类型
        let clos3:(Int, Int) -> Int = {
            (a, b) in
            return a + b
        }
        print(clos3(2,5))

三、尾随闭包

//闭包做为函数最后一个参数的时候,可以省略参数标签

    func closFunction(block:() -> Void){
        block();
    }
    
    func textFoxClos() {
        //实际使用,这是xcode帮我们省略了标签
        closFunction { 
            
        }
        //实质是这样的
        closFunction(block: {
            
        })
        
        //尾随闭包内再写一个尾随闭包xcode不会帮我们省去参数标签,但是可以手动删除参数标签
        closFunction { 
            closFunction(block: { 
                
            })
        }
    }

四、逃逸闭包

//当一个闭包作为参数传到一个函数中,需要这个闭包在函数返回之后才被执行,我们就称该闭包从函数种逃逸。一般如果闭包在函数体内涉及到异步操作,但函数却是很快就会执行完毕并返回的,闭包必须要逃逸掉,以便异步操作的回调。

  逃逸闭包一般用于异步函数的回调,比如网络请求成功的回调和失败的回调。语法:在函数的闭包行参前加关键字“@escaping”

func GCDText(completion: @escaping ([Any]) -> ()){
        let json:[Any] = ["王万","老万",16]
        
    
        DispatchQueue.global().async {
            print("耗时操作\(Thread.current)")
            //睡眠
            Thread.sleep(forTimeInterval: 1.0)
            
            
        
            //主队列回调
            DispatchQueue.main.async(execute: { 
                print("主线程更新ui \(Thread.current)")
                
                completion(json)
            
            })
            
        }
        
    }

五、起别名

//起别名 类似oc中的typedef起别名
        typealias AddBlock = (Int, Int) -> Int
        let add:AddBlock = {
            (a,b) in
            return a + b;
        }
        print(add(2,4))



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值