iOS 中 Block 和 Closures 简介

目前iOS开发有两种语言,Objective-c 和Swift。在Objective-c中,block的使用非常频繁,在开发中占据了很重要的位置。 Closures,通常被称作闭包,同样是Swift语言中很重要的一个部分。其功能类似Objective-c中的block。


先回顾一下block的用法:

通常来说,block的作用是保存一段代码,在需要的时候去执行。

一,声明

block的语法格式为:

returnType(^blockName)(parameterTypes)
返回值类型(^Block的名字)(参数)
block 的声明方式和普通对象一致,有使用@property定义和直接定义两种方式;

@property (nonatomic, copy) void(^myBlock)(void);

void(^myBlock)();

在方法内部使用直接声明的,可以直接在声明的时候进行定义:如:
void(^myBlock)() = ^(void){
     NSLog(@"123");
 };

二、使用
Block 在使用过程中,有多种形式。分别为 无参数 无返回值、有参数 无返回值, 和 有参数 有返回值 这几种。下面分别列举一下:

1、无参数 无返回值

[self postData:^{ 
    //下载完成
}];

- (void)postData:(void(^)())finished{
    finished();//下载完成
}

2、 有参数,无返回值


[self newLoadData:^(NSData *data) {
    NSLog(@"%@",data);
}];

- (void)loadData:(void(^)(NSData *data))finished{
    NSData *data = [[NSData alloc]initWithBase64EncodedString:@"123456" options:NSDataBase64DecodingIgnoreUnknownCharacters];
    finished(data);
}

3、有参数,有返回值

int s =  sunBlobck(1,2);

int(^sunBlobck)(int,int) = ^(int a, int b){
     return a+b;
};

在Swift中,Closures(闭包)的作用和block类似,也是用来保存代码块,延缓执行,保证执行顺序的。

一、声明

闭包的格式为:
(parameterTypes)->(returnType) in

(形参列表) -> (返回值) in

二,使用

对比上文的Bolck,这里的闭包也按照 无参数 无返回值、有参数 无返回值, 和 有参数 有返回值 这几种进行介绍。

1、无参数 无返回值

//函数定义
func loadData(finished:() -> ()){
     finished()//下载完成
}

//调用方法
 1、将闭包作为函数的一个实参【swift3.0之前 闭包作为一个参数,可以省略finished:闭包名,但在3.0是会报错的。】

loadData (finished:{ ()->() in
     print("下载完成")
})

/*
另外无参数无返回值 的 可以省略 ()->() in

loadData (finished: {
     print("下载完成")
})
*/



2、如果闭包是函数的最后一个参数,闭包可以写在函数()的 后面,此时没有函数名finished:
loadData() { ()->() in
     print("下载完成")
}
同样无参数无返回值 的 可以省略 ()->() in
loadData() {
    print("下载完成")
}
或者:
loadData {
    print("下载完成")
}

2、 有参数,无返回值

func loadResultData(finished:(Data) -> ()) ->(){
     let data = "123456".data(using: String.Encoding.utf8)
     if data != nil {
         finished(data!)
    }
 }

//调用
loadResultData { (data) in
    print(data)
}

3、有参数,有返回值

 let sum = {
    (a:Int,b:Int)->(Int) in
    return a + b
}

print(sum(2,3))//5

以上就是Objective-c中的block 和Swift中 Closures 的简单介绍以及对比。这些只是基础,同block一样,Closures也有很多高级用法。需要学习的还有很多。

书山有路勤为径,学海无涯苦作舟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值