Block由淺入深(1):Block的語法

曾經面試過一個iOS開發,讓他寫一個參數是int返回值是void的Block聲明,這位同學思考了一會兒只能很尷尬的說不太會寫。相信很多iOS開發者剛剛接觸到Block的時候,都會對Block的寫法有或多或少的疑惑,本文采用一種比較容易理解的方式介紹Block的聲明語法、實現語法和省略語法。只要有C語言基礎,相信閱讀完本文后就能夠很輕松的寫出無論多么復雜的Block。

Block的聲明語法

Block的語法其實和C函數指針比較類似,比如下面聲明一個返回值為int,名字是add,參數是兩個int的C函數指針:
int (*add)(int, int);
我們將*修改為^就可以得到一個返回值是int,名字是add,參數是兩個int的Block聲明:
int (^add)(int, int);

Block的實現語法

Block的實現語法也類似與C函數:

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

C函數:

int add(int a, int b) {
    return a + b;
}

我們可以將Block理解為C語言的匿名函數,與C函數相比,Block去掉了函數名,在返回值前加了^。

Block的省略語法

我們經常看到下面這種形式的寫法:

^{ NSLog(@"hello world"); };

這是因為Block的返回值是void或者參數是void的時候,可以省略返回值或者參數,上面的Block相當于:

^void (void) { NSLog(@"hello world"); };

當然下面這種形式的Block也是合法的:

^ (int a) { a++; };
^int { return 0; };
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。