在使用 UIView animation 的時候常常看到,
但是不要只會使用內建的 Block 功能,
你也可以建立你自己的 Block 在你自己的程式中使用,
Block 像是將一個 Method 當變數使用,
廢話不多說,趕快開始教學吧。
首先,Block 可以當做一個變數型態來用,用法如下
// 定義一個 BlockName1 的型態,傳入一個 int 的值,沒有回傳值 typedef void (^BlockName1) (int someValue); // 這是另外一種 BlockName2 的形態,沒有傳入值,有 NSString 的回傳值 typedef NSString* (^BlockName2) (void);
Block 的宣告與實作
// 宣告 block1 為 BlockName1 的型態,
BlockName1 block1;
// 實作 block1
block 1 = ^(int someValue){
NSLog(@"Block1:%d", someValue);
};
// 宣告與實作 block2
BlockName2 block2 = ^(){
return @"I love block !!";
};
// 不宣告型態直接實作 Block
int (^block3) (int a, int b) = ^(int a, int b){
return a+b;
};
// 宣告與實作都結束了,接下來就是使用它了
block1(3);
NSLog(@"Block2:%@", block2());
NSLog(@"Block3:%d", block3(3, 8));
執行的結果如下
Block1:3 Block2:I love block !! Block3:11
最後是重頭戲了,將 Block 與 Method 一起使用
typedef (^NewBlock1) (void);
// 宣告一個 Method 並實作它
- (void)aMethodWithBlock:(NewBlock)newBlock otherBlock:(void (^) (NSString *string))stringBlock{
newBlock();
stringBlock(@"World");
}
這時候可以在外部的 Class 呼叫這個 Method,並且實作 Block 傳入
NewBlock block = ^(){
NSLog(@"Hello ");
};
[aClass aMethodWithBlock:block otherBlock:^(NSString *string){
NSLog(@"%@ !!", string);
}];
執行的結果如下
Hello World !!
基本 Block 的教學就到這邊,
Block 有時可以將它當做一個 Delegate 的方法使用,
來實現需要回傳值的動作。
好了,教學就到此為止,等有其他可教的我會再做教學的。
沒有留言:
張貼留言