塊代碼編程—聲明和建立塊代碼

來源:互聯網
上載者:User

聲明一個塊代碼的引用

塊代碼變數用來儲存到塊代碼的引用。使用和聲明函數指標相識的文法聲明塊代碼變數,只是把其中的*換成預留位置^。塊代碼類型基本上都是C語言的格式。下面就是一些有效塊代碼變數聲明:

void (^blockReturningVoidWithVoidArgument)(void);
int (^blockReturningIntWithIntAndCharArguments)(int, char);
void (^arrayOfTenBlocksReturningVoidWithIntArgument[10])(int);

塊代碼同樣支援可變參數列表。沒有參數的塊代碼必須在參數列表中使用void。

塊代碼在傳入參數,傳回值等方面使用中繼資料驗證,在設計上達到資料安全的目的。你可以把一個塊代碼的引用轉換成一個任何類型的指標,反之亦然。但是你不能通過一個指標引用來對一個塊代碼引用進行解引用--因為在編譯時間期不能計算塊代碼所佔大小。

你可以建立塊代碼的類型--只是你在多個地方建立同一種類型的塊代碼的最好的方式:

typedef float (^MyBlockType)(float, float);
 
MyBlockType myFirstBlock = // ... ;
MyBlockType mySecondBlock = // ... ;

建立塊代碼

使用^標示一個塊代碼的開始。可能後面跟著使用一對小括弧括起來的參數列表。塊代碼的代碼部分是在一對大括弧裡面。下面是一個塊代碼定義的樣本,並把這個塊代碼賦值給一個前面聲明的塊代碼變數--和C語言一樣,塊代碼使用一個分號;作為定義的結束:

int (^oneFrom)(int);
 
oneFrom = ^(int anInt) {
    return anInt - 1;
};

如果你在塊代碼定義中沒有標示傳回值類型,傳回值類型會被通過塊代碼的內容推斷出來,如果這個傳回值是推斷出來的,並且參數列表是void,你可以省略這個void。如果多個return語句出現,他們必須返回完全相同類型的值(合適的時候必須使用轉換)。

全域塊代碼

在檔案範圍內,你可以定義一個塊代碼具有全域可用的:

#import <stdio.h>
 
int GlobalInt = 0;
int (^getGlobalInt)(void) = ^{ return GlobalInt; };

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.