你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 貓貓學iOS 之BLOCK的妙用_利用block實現鏈式編程

貓貓學iOS 之BLOCK的妙用_利用block實現鏈式編程

編輯:IOS開發綜合

 

一:場景

我們有個對象人,他有兩個方法,一個是學習study,一個是跑步run,
這個人有個怪癖,跑完步之後必須學習,為了實現這個方法並且能調用方便,我們讓跑步和學習都回返回自己這個對象作為下一次調用的快捷方式,代碼如下:
調用:

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

人對象:


// Person.h
#import 

@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

運行結果
這裡寫圖片描述

二:block鏈式結構實現

調用:

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

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

人對象:

//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的巧妙用法,簡單了解就好

執行結果

這裡寫圖片描述

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved