最近有個朋友問我iOS中的block 是怎麼用的,
我根據自己的所學把實際應用的一些寫法告訴他了
因為我覺得這個主要是更注重實用性,
好了廢話不多說,直接上實際的
------
實際上使用 通常是進行 block 傳值,A 頁面--> B頁面 如果是正向的話,那麼我們把B頁面的值傳給A就叫做 反向傳值(或者叫做回調)。
步驟:
1. 誰發送訊息,誰就寫block(同代理的使用)
#import <UIKit/UIKit.h>typedef void(^myBlock)(NSString *str);@interface DetailViewController : UIViewController// 產生一個 block 屬性@property(nonatomic, copy) myBlock block;@end
2.在B.m 檔案中進行傳值--- 當B頁面要消失的時候,調用自己的block傳值
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 調用 自己的block 給它傳入一個 實參 NSString *str = @"你好我是detail頁面傳入的字串"; // block 是基於C語言的函數,直接傳參調用<具體的實現在訊息的接收方A> self.block(str); [self dismissViewControllerAnimated:YES completion:^{ }];}
3. 就是在 A頁面,接收B頁面傳過來的值了 ----- < 在建立B頁面類執行個體的時候,進行實現 b.block 接收它傳入的參數>
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ DetailViewController *detail = [[DetailViewController alloc] init]; // 直接調用 detail的 block 實現 detail.block = ^(NSString *str){ // 列印傳進來的 str NSLog(@"str :%@",str); }; // 跳轉到 detail頁面 [self presentViewController:detail animated:YES completion:^{ }];}
---------------------------- 這就是 Block 文法使用的 3部曲 了--------------------
怎麼樣是不是很簡單。。
下面看看效果圖把
============後延==========
Block的一些小定義,估計懂了上面已稍微一看就懂了,僅供參考
1.block可以用來儲存一段代碼,或者用來封裝一段代碼。--->程式碼片段,代碼塊。
2.block的標誌是^
3.block跟函數很像 (其實它就是C語言函數)
可以儲存代碼;
可以有返回 值;
也可以有行參;
調用方式一樣;
4.定義一個block
#pragma mark 不帶參數的block
void (^outputblock)() = ^{
NSLog(@"------------");
};
outputblock();
}
5.帶行參的block
#pragma mark - 帶參數的block
int (^sumblock)(int, int) = ^(int a,int b){
return a+b;
};
int sum = sumblock(3,13);
int sum1 = sumblock(1,2);
NSLog(@"%d",sum1);
NSLog(@"%d",sum);
#pragma mark - 輸出n條橫線
// Block的 聲明和實現
void(^myblock)(int) = ^(int n){
for (int i = 0; i < n; i++) {
NSLog(@"-----------------");
}
};
//block 的調用
myblock(10);
6.如果block沒有行參,可以省略後邊的小括弧。
7.使用typedef來定義一個block的類型
typedef int(^Myblock)(int,int);
Myblock sumblock = ^(int a,int b){
return a+b;
}
Myblock minus = ^(int a,int b){
return a-b;
}
8.block可以訪問外邊的變數,也可以修改外部的局部變數
必須提前聲明
例如 __block int a = 5;
用 __block 修飾過的變數 可以在調用 Block的時候修改它的值
後記:
關於 Block 其實還有很多的小知識點
在這裡我就先說這麼多把,主要是能實用了,以後我會儘快把 比較完整的 Block 的知識寫上來,供所有有需要的朋友參考。。