OC中Block语法、Block使用以及通过Block实现数组排序-创新互联

Block:语法块,本质上是匿名函数(没有名称的函数)

创新互联专注于企业成都全网营销、网站重做改版、临澧网站定制设计、自适应品牌网站建设、H5建站购物商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为临澧等各大城市提供网站开发制作服务。

标准C里面没有Block,C语言的后期扩展版本,加入了匿名函数

在C++、JS、Swift等语言有类似语法,叫做闭包

Block语法和C语言里的函数指针很相似,下面我们先来回顾下C语言中的函数和函数指针

C语言中函数是指:实现某一功能的代码段

完整的函数包括两部分:函数声明、函数定义

函数声明,即函数原型。例如:int sum (int x,int y);具有两个×××参数,一个×××返回值的函数

函数定义,即函数实现。例如:int sum(int x,int y){

return x + y;

}

函数指针(变量):存放函数地址(函数名)的指针变量

int(*p)(int x,int )= sum;

函数指针类型:int(*)(int x,int y)即:指向两个×××参数,一个×××返回值函数的指针

函数指针变量:p

函数指针的值:sum

Block 匿名函数:没有名称的函数

例如:int (int x,int y)

因为Block是匿名函数,block变量存放的函数的实现,通过block变量能直接调用函数

Block类型:int (^)(int)

Block变量:myBlock

Block值:^int (int num) {return 7*num;}

即:^返回值类型(参数列表){函数体}其中返回值类型可以省略

例如:写一个 返回值为××× 参数为OC字符串(仅一个参数)的block,实现将字符串转换为×××的功能

 int (^myBlock)(NSString *) = ^(NSString *string) {

       return [string intValue];

   };
   NSLog(@"%d",myBlock(@"123"));

block的数据类型代表了匿名函数的格式(返回值类型,形参的类型)

block变量的定义与函数指针变量的定义类似,唯一区别于函数指针变量的是变量名前通过脱字符(^)修饰

首先应该用^修饰,剩余的部分与C语言函数定义一致,大的不同就是没有函数名(同时返回值类型也可以省略)

block变量在定义时具有变量定义的基本特征,赋值号右侧的匿名函数可以当做一个整体被赋值,类似于 int a = 5;

block变量所赋的值是匿名函数。又兼具函数的特征,并且是唯一可以定义在某个函数实现内部(C语言中认为函数是不能嵌套定义的,block是个特例)

Block进行typedef

typedef int (^BlockType)(int x,int y)

原类型:int(^)(int x,int y)

新类型:BlockType

类比函数指针的类型定义,格式与函数指针一致,类型定义一定程度上简化了block的使用。

   typedef int (^SumType)(int,int);
   SumType sumBlock = ^(int x,int y) {
       return x + y;
   };
   int result = sumBlock(5,4);
   NSLog(@"%d",result);

 __block类型标识可以运行局部变量在其后续定义的block内部正常访问,

   __block int num = 0;

   void (^testBlock)() = ^() {
       for (int i = 0; i < 10; i++) {
           count++;
           num++;
           NSLog(@"%d",count);
       }

   };

block调用

   testBlock();

数组使用Block排序

OC中Block语法、Block使用以及通过Block实现数组排序

数组使用Block对两个字符串进行比较

   NSComparisonResult (^compareBlock)(NSString *,NSString *) = ^(NSString *str1,NSString *str2) {

       return [str2 compare:str1];

//如果是升序返回-1,如果是降序返回1,如果相等返回0

   };

   NSLog(@"%ld",compareBlock(@"11",@"12"));

OC中Block语法、Block使用以及通过Block实现数组排序

   NSArray *array = @[@1,@2,@13,@12,@23];
   NSArray *resultArray1 = [array sortedArrayUsingSelector:@selector(compare:)];
   NSLog(@"%@",resultArray1);

数组使用Block排序   降序排列

  NSComparator sortBlock = ^(id obj1,id obj2) {

       return [obj2 compare:obj1];
   };
   NSArray *resultArray2 = [array sortedArrayUsingComparator:sortBlock];
   NSLog(@"%@",resultArray2);

升序序排列

  NSArray *resultArray3 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

       return [obj1 compare:obj2];

   }];

  NSLog(@"%@",resultArray3);

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页标题:OC中Block语法、Block使用以及通过Block实现数组排序-创新互联
网页网址:https://www.cdcxhl.com/article8/docdip.html

成都网站建设公司_创新互联,为您提供网站设计小程序开发手机网站建设网站制作静态网站网站设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设