IOS_編程思想_Block

開啟蘋果自帶的block代碼塊:

輸入inlineBlock開啟蘋果自帶的block代碼塊

<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
        <#statements#>
    };

舉個例子

void(^BC_Block)() = ^() {
     NSLog(@"我是一個block");
     };
     BC_Block();

當返回值為id類型的時候,所定義的值也必須將類型寫上,否則會報錯如下所示!


image.png

正確的寫法:

image.png

由此可見,蘋果自帶的block代碼塊并不是完整的!

將完整的Block添加到代碼塊:

<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^<<#returnType#>>(<#parameters#>) {
        <#statements#>
    };

Xcode 9.0.1 鼠標左鍵長按1秒,拖拽到右側的代碼塊列表中
Xcode 9.0.1 以前的可以直接拖拽到右側的代碼塊列表中

Block開發中的使用場景:

準備工作:

先定義一個Person類
Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic,copy) void(^run)(void);

-(void)eat:(void(^)(void))block;

-(Person *(^)(int))write;

@end

Person.m

#import "Person.h"

@implementation Person

-(void)eat:(void (^)(void))block {
    NSLog(@"Person里面調用Block");
    block();
}
-(Person *(^)(int x))write {
//    self是方法調用者!!
    return  ^Person *(int x) {
        NSLog(@"我寫到%d頁",x);
        return self;
    };
}

@end

ViewController.m

@interface ViewController ()
@property (nonatomic,strong) Person *p;
@end

1.Block作為屬性.在合適的時候調用方法

 Person *p = [[Person alloc] init];
    p.run = ^{
        NSLog(@"執行對象中的Block");
    };
    _p = p;
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    _p.run();
}

2.Block作為參數.外界不調用,留給內部調用

[p eat:^{
        NSLog(@"吃東西");
    }];

3.Block作為返回值

void(^block)(void) = p.write;
block(1000);

等同于

p.write(1000);

優點:1.可讀性強
2.擴展性 ---- 鏈式編程

p.write(100).write(200).write(300);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • iOS代碼塊Block 概述 代碼塊Block是蘋果在iOS4開始引入的對C語言的擴展,用來實現匿名函數的特性,B...
    smile刺客閱讀 2,375評論 2 26
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,229評論 4 61
  • 看見更多的不一樣,然后去理解更多的不一樣 當你能看見有能理解的時候 一個孩子的內心,他的彈性就變大了,他的心也變寬...
    郁郁寡歡的牛閱讀 104評論 0 0
  • 如何培養認知選擇正確的剛需 ?前面講到剛需決定做驅動力 也就是說一個人每天必須做的事情決定了他自己推動自己,不需要...
    孤獨中的喧囂閱讀 269評論 0 0
  • 擁有時,沒覺得什么,總是等到失去后才懂得珍惜。時光飛逝,如指間沙,轉眼間,我已經考入了大學。行走在這個陌生的城市,...
    淺雨悠揚閱讀 227評論 0 0