iOS的block與鏈?zhǔn)骄幊趟枷?/h1>
block的基礎(chǔ)用法

首先拜一下官方的block圖,忘了的時候瞅一眼。


blocks-3.jpg

如果您對block不是很熟悉,可以看下block官方文檔

鏈?zhǔn)骄幊?/h5>

很多朋友應(yīng)該在平時在工程中常會遇到Masonry這個自動布局庫。這個可以幫助大家簡化自動化布局的代碼,真的是比傳統(tǒng)的自動化布局代碼好看太多,簡潔而充滿藝術(shù)感:

make.top.equalTo(self.view).offset(60)

像這樣通過.語法,將需要執(zhí)行的代碼塊連續(xù)的書寫下去,就是鏈?zhǔn)骄幊?。這樣把代碼寫成一句話,可讀性大大提高了。那么這是如何實現(xiàn)的呢?我在下面寫了一個小demo實現(xiàn)了一個類似棧的功能,最后實現(xiàn)的樣子大概是這樣的:

make.push(2).push(4).pop().push(5).push(6).push(7);

希望您能在看下面代碼的時候先自己思考下,如果是自己實現(xiàn)要怎么寫呢?
小江實現(xiàn)的代碼如下:

@class StackMaker;
@interface StackTool : NSObject

+ (NSMutableArray *)makeStack:(void (^)(StackMaker *make))block;

@end


@implementation StackTool
+ (NSMutableArray *)makeStack:(void (^)(StackMaker *make))block {
    StackMaker *make = [[StackMaker alloc] init];
    block(make);
    return make.result;
}
@end



@interface StackMaker : NSObject

@property (nonatomic, strong) NSMutableArray *result;

- (StackMaker *(^)(int))push;
- (StackMaker *(^)())pop;

@end


@implementation StackMaker
- (id)init {
    self = [super init];
    if (self) {
        _result = [NSMutableArray array];
    }
    return self;
}

- (StackMaker *(^)(int))push {
    return ^StackMaker *(int value){
        [_result addObject:@(value)];
        return self;
    };
}

- (StackMaker *(^)())pop  {
    return ^StackMaker *() {
        [_result removeLastObject];
        return self;
    };
}
@end



- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSMutableArray *result = [StackTool makeStack:^(StackMaker *make) {
        make.push(2).push(4).pop().push(5).push(6).push(7);
    }];
    NSLog(@"result:%@", result);
}

運行下,結(jié)果如下

2017-01-09 22:54:41.540 MyTestProject[29705:15039270] result:(
    2,
    5,
    6,
    7
)

是不是很簡單?block在鏈?zhǔn)骄幊讨兄匾囊稽c就是 方法的返回值要是block,block的返回值為本身對象,block參數(shù)為操作的值。
我們在日常編碼中,這種思想也有很多用武之地,它比較適合每部分操作相對原子化,并把這些操作串聯(lián)在一起的情境下使用,比如數(shù)據(jù)庫操作:
sqlTool.select(nil).from(@"Student").where(@"name = blue").sql;
這樣看起來就又清爽又簡潔

以上,如有問題敬請批評指正~本文系作者原創(chuàng),轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容