標籤:
block 是個很陌生的東西啊。以前沒有學會,現在再看它,還是覺得很稀奇古怪。
無奈,之後硬著頭皮學了。。
//有參傳回值
格式:
傳回值類型 (^變數名)(參數類型及個數) = ^(形參列表){
代碼塊語句;
return;
};
eg:
int (^plus)(int a,int b) = ^(int a,int b){
return a+b;
};
NSLog(@"%d",plus(2,3));
1.傳回值類型是int;
2.變數名是plus;
3.參數類型是int,個數,就是使用逗號隔開;
4.在後面,形參也是要分別都寫出來的;
5.在大括弧裡面把要寫的語句加上;
6.最後使用分號,以示結束;
7.調用時,block方法後面要添加().
這樣就相當於公式吧。以前不求甚解,現在求也求不通。
對於無傳回值的block,就是沒有傳回值的,可以分為有參數和沒有參數兩種。
只是單純地去執行裡面的語句。我是這麼理解的。
有參無傳回值:
格式:
void(^變數名)(參數類型及個數) = ^(形參列表){
代碼塊語句;
};
eg:
void (^myblock1)(int,int) = ^(int a, int b){
NSLog(@"a+b=%d",a+b);
};
myblock1(1,2);
無參有傳回值
格式:
void (^block變數名)() = ^(){
代碼塊的語句;
};
最佳化:
void (^block變數名)() = ^{
代碼塊語句;
};
void(^myBlock4)()=^{
NSLog(@"我很好");
};
總結了上面的以後,覺得清晰了很多。在UI裡面也會用到傳值。以後在工作中要多總結、多實踐。
光說不練假把式。。
補:
typedef 忘寫了。。
typedef,其實是把block定義為了一個類型。當同一類型有多種不同的變數的時候,這個就方便多了。
typedef void (^Block)();
----相當於定義了一個Block類型。我們可以隨便定義這個類型的變數了。
Block b1 = ^{
NSLog(@"helloWorld");
};
b1();
//定義有參數/傳回值的block類型
//定義新的別名
//傳回值是int,有兩個int類型的參數
typedef int (^NewType)(int,int);
NewType new1 = ^(int a,int b){
return a+b;
};
//連續定義多個NewType類型的變數
NewType new2,new3,new4;
new1 = ^(int x,int y){
return x>y?x:y;
};
int s = new1(2,3);
NSLog(@"s = %d",s);
相對來說,還是很方便快捷的。
block iOS 塊