久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

OC中Block語(yǔ)法,、Block使用以及通過(guò)Block實(shí)現(xiàn)數(shù)組排序

 VipeX 2015-11-04

Block:語(yǔ)法塊,,本質(zhì)上是匿名函數(shù)(沒(méi)有名稱的函數(shù))

標(biāo)準(zhǔn)C里面沒(méi)有Block,C語(yǔ)言的后期擴(kuò)展版本,,加入了匿名函數(shù)

在C++,、JS、Swift等語(yǔ)言有類似語(yǔ)法,,叫做閉包

Block語(yǔ)法和C語(yǔ)言里的函數(shù)指針很相似,,下面我們先來(lái)回顧下C語(yǔ)言中的函數(shù)和函數(shù)指針

C語(yǔ)言中函數(shù)是指:實(shí)現(xiàn)某一功能的代碼段

完整的函數(shù)包括兩部分:函數(shù)聲明、函數(shù)定義

函數(shù)聲明,,即函數(shù)原型,。例如: int sum (int x,int y) ;具有兩個(gè)整形參數(shù),一個(gè)整形返回值的函數(shù)

函數(shù)定義,,即函數(shù)實(shí)現(xiàn),。例如: int sum(int x,,int y){

return x + y,;

}

函數(shù)指針(變量):存放函數(shù)地址(函數(shù)名)的指針變量

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

函數(shù)指針類型: int(*)(int x,,int y) 即:指向兩個(gè)整形參數(shù),一個(gè)整形返回值函數(shù)的指針

函數(shù)指針變量: p

函數(shù)指針的值: sum

Block 匿名函數(shù):沒(méi)有名稱的函數(shù)

例如: int (int x,,int y)

因?yàn)锽lock是匿名函數(shù),,block變量存放的函數(shù)的實(shí)現(xiàn),通過(guò)block變量能直接調(diào)用函數(shù)

Block類型: int (^)(int)

Block變量: myBlock

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

即:^返回值類型(參數(shù)列表){函數(shù)體}其中返回值類型可以省略

例如:寫(xiě)一個(gè) 返回值為整形 參數(shù)為OC字符串(僅一個(gè)參數(shù))的block,實(shí)現(xiàn)將字符串轉(zhuǎn)換為整形的功能

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

return [string intValue];

};

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

block的數(shù)據(jù)類型代表了匿名函數(shù)的格式(返回值類型,,形參的類型)

block變量的定義與函數(shù)指針變量的定義類似,,唯一區(qū)別于函數(shù)指針變量的是變量名前通過(guò)脫字符(^)修飾

首先應(yīng)該用^修飾,剩余的部分與C語(yǔ)言函數(shù)定義一致,,最大的不同就是沒(méi)有函數(shù)名(同時(shí)返回值類型也可以省略)

block變量在定義時(shí)具有變量定義的基本特征,,賦值號(hào)右側(cè)的匿名函數(shù)可以當(dāng)做一個(gè)整體被賦值,類似于 int a = 5;

block變量所賦的值是匿名函數(shù),。又兼具函數(shù)的特征,,并且是唯一可以定義在某個(gè)函數(shù)實(shí)現(xiàn)內(nèi)部(C語(yǔ)言中認(rèn)為函數(shù)是不能嵌套定義的,block是個(gè)特例)

Block進(jìn)行typedef

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

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

新類型: BlockType

類比函數(shù)指針的類型定義,,格式與函數(shù)指針一致,,類型定義一定程度上簡(jiǎn)化了block的使用。

   typedef int (^SumType)(int,int);

SumType sumBlock = ^(int x,int y) {

return x + y;

};

int result = sumBlock(5,4);

NSLog(@"%d",result);

__block類型標(biāo)識(shí)可以運(yùn)行局部變量在其后續(xù)定義的block內(nèi)部正常訪問(wèn),,

   __block int num = 0;

void (^testBlock)() = ^() {

for (int i = 0; i < 10; i++) {

count++;

num++;

NSLog(@"%d",count);

}

};

block調(diào)用

testBlock();

數(shù)組使用Block排序

數(shù)組使用Block對(duì)兩個(gè)字符串進(jìn)行比較

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

return [str2 compare:str1];

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

  };

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

   NSArray *array = @[@1,@2,@13,@12,@23];

NSArray *resultArray1 = [array sortedArrayUsingSelector:@selector(compare:)];

NSLog(@"%@",resultArray1);

數(shù)組使用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);

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多