1. 程式人生 > >OC 重點block-------3-------block如何作為函式的引數

OC 重點block-------3-------block如何作為函式的引數

首先說下

簡化block變數的複雜定義

    1)。typefy :講一個長型別定義為一個短型別

    2)。我們可以用typedef 講長型別的block型別,定義為一個短型別

     typedef void (^newType)();   是一個block 型別,無引數無返回值的型別

typedefvoid (^newType)();

//        代表重新定義一個型別叫做newType

newType block1;

newType block2;

typedefint(^newType2)(int  num1,int  num2);

newType2

block3 = ^int(int num1,int num2){

int num3 = num2+num1;

return num3;

        };

int num =  block3(10,30);

NSLog(@"----%d",num);

---------------------block如何作為函式的引數

1.block是一個數據型別,所以可能可以作為引數

 2.如何位函式定義block型別的引數:a.就是小括號中宣告一個指定的block變數的就可以了,b.可以使用typedef簡化定義,這樣就簡易了些

 3,如何呼叫帶block的引數呢?要求呼叫的時候,那麼要呼叫的時候傳入一個和形參

block要求的程式碼段。

呼叫的時候,可以先將程式碼段,儲存到一個block變數中,然後傳遞這個block變數,也可以直接講符合要求的程式碼段寫到小括號裡

 4.block作為函式的引數可以實現什麼效果:可以將呼叫者自己寫的1段程式碼,傳遞到函式的內部區去執行.

 */

#import <Foundation/Foundation.h>

typedefvoid (^newType)();

//為函式定義一個引數,定義個block型別的引數

//無引數無返回值,

//void test(void (^myBlock1)())

void test(newType block1)

{

NSLog(@"~~~~~~~");

    block1();

NSLog(@"~~~~~~~~");

}

void test2 (int (^jiafaBlock)(int num1,int num2))

{

NSLog(@"~~~~~~~");

int sum = jiafaBlock(100,200);

NSLog(@"=====%d",sum);

NSLog(@"~~~~~~~~");

}

int main(int argc, constchar * argv[]) {

newType type = ^{

NSLog(@"哈哈");

NSLog(@"呵呵");

NSLog(@"嘿嘿");

    };

test(type);

test2(^int(int num1, int num2) {

return num1 +num2;

    });

//    呼叫的時候,可以先將程式碼段,儲存到一個block變數中,然後傳遞這個block變數,也可以直接講符合要求的程式碼段寫到小括號中傳遞

//    test(^{

//        NSLog(@"哈哈");

//        NSLog(@"呵呵");

//        NSLog(@"嘿嘿");

//    }

//         );

return0;

}

test呼叫block的時候,圖片如下