iOS --- block的一些使用方法(反向傳值)

來源:互聯網
上載者:User

最近有個朋友問我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 的知識寫上來,供所有有需要的朋友參考。。




      

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.