AJ學IOS 之BLOCK的妙用_利用block實現鏈式編程

AJ分享,必須精品java

 

一:場景

咱們有個對象人,他有兩個方法,一個是學習study,一個是跑步run,
這我的有個怪癖,跑完步以後必須學習,爲了實現這個方法而且能調用方便,咱們讓跑步和學習都回返回本身這個對象做爲下一次調用的快捷方式,代碼以下:
調用:markdown

int main(int argc, const char * argv[])
{
    @autoreleasepool {
    //初始化人
        Person *p = [[Person alloc] init];
        //調用
        [[p study] run];
    return 0;
}

人對象:學習

// Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject
- (Person *)study;
- (Person *)run;
@end
// Person.m
#import "Person.h"

@implementation Person
- (Person *)study
{
    NSLog(@"study----");

    return self;
}

- (Person *)run
{
    NSLog(@"run----");
    return self;
}

@end

運行結果
這裏寫圖片描述ui

二:block鏈式結構實現

調用:spa

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Person *p = [[Person alloc] init];

        p.study(@"xx寶典").run().study(@"xx剪髮");
    }
    return 0;
}

人對象:code

//Person.h
@interface Person : NSObject


- (Person *(^)(NSString *name))study;
- (Person *(^)())run;
@end
//Person.m
@implementation Person

- (Person *(^)(NSString *))study
{
    return ^(NSString *name){
        NSLog(@"study----%@", name);
        return self;
    };
}

- (Person *(^)())run
{
    return ^{
        NSLog(@"run----");
        return self;
    };
}
@end

在這裏面,咱們對象

p.study(@」xx寶典」).run().study(@」xx剪髮」);
調用study方法:p.study
執行block:p.study(@」xx寶典」)
結合person內部寫的方法圖片

- (Person *(^)(NSString *))study
{
    return ^(NSString *name){
        NSLog(@"study----%@", name);
        return self;
    };
}

明顯能夠看到,當執行p.study(@」xx寶典」)時候,內部是return一個返回值是person*類型(最後的return self)的block 這也就解釋了爲何下一句能夠繼續連着用點來調用了。也就是說返回的是一段block,這段block裏面又有返回值,返回值是person的對象self。
這裏的參數有點暈,記住就好,用鏈式結構的block的巧妙用法,簡單瞭解就好string

執行結果it

這裏寫圖片描述

相關文章
相關標籤/搜索