Objective C 中 Block 的定義

Objective C 中 Block 的各種聲明和定義形式,看過八百遍了,總是忘記怎么寫?,F(xiàn)在寫一遍記下來備查。

本文以如下形式 block 舉例:

  • 入?yún)閮蓚€ NSString * 類型參數(shù)
  • 返回值為 NSString * 類型

實現(xiàn)兩個字符串拼接

用于說明 block 的如下寫法:

  • 聲明
  • 定義
  • 使用

一、不使用 typedef

1、普通形式聲明、定義、使用 Block 方式

// 聲明
NSString *(^myBlock)(NSString *, NSString *);
// 定義
myBlock = ^NSString *(NSString *str1, NSString *str2) {
    return [str1 stringByAppendingString:str2];
};
// 使用
NSString *s = myBlock(@"abc", @"123");
NSLog(@"s = %@", s);

2、Block 作為函數(shù)參數(shù)

// 聲明
- (void)callBlock:(NSString *(^)(NSString *, NSString *))myBlock;
// 使用方法
[obj callBlock:^NSString *(NSString *str1, NSString *str2) {
    return [str1 stringByAppendingString:str2];
}];

二、使用 typedef

1、聲明、定義、使用 Block 方式

// typedef
typedef NSString *(^MyBlockDef)(NSString *, NSString *);
// 聲明
MyBlockDef myBlock;
// 定義
myBlock = ^NSString *(NSString *str1, NSString *str2) {
    return [str1 stringByAppendingString:str2];
};
// 使用
NSString *s = myBlock(@"abc", @"123");
NSLog(@"s = %@", s);

2、Block 作為函數(shù)參數(shù)

// typedef
typedef NSString *(^MyBlockDef)(NSString *, NSString *);
// 聲明
- (void)callBlockWithTypeDef:(MyBlockDef)myBlock;
// 使用方法
[obj callBlockWithTypeDef:^NSString *(NSString *str1, NSString *str2) {
    return [str1 stringByAppendingString:str2];
}];

三、總結

1、所有區(qū)別都體現(xiàn)在 Block 的不同聲明形式,具體定義形式都一致
2、Block 的聲明中,形參可以只指定類型,不指定參數(shù)名;定義中必須都完整指定;
3、typedef聲明塊類型變量寫法一致,但區(qū)別于對象方法中參數(shù)的聲明。

四、相關資料

How Do I Declare A Block in Objective-C?

(完)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容