iOS链式调用的简单实现

2020-12-25  本文已影响0人  OrrHsiao

利用方法返回一个Block(这个Block内部返回self)来实现方法的链式调用。

栗子🌰:
#import <Foundation/Foundation.h>
@class XAPeople;

NS_ASSUME_NONNULL_BEGIN

@interface XAPeople : NSObject

@property (nonatomic , copy)NSString *name;
@property (nonatomic , assign)NSInteger age;

- (XAPeople * (^)(NSString *))set_xaName;
- (XAPeople * (^)(NSInteger))set_xaAge;
- (XAPeople * (^)(void))xa_eat;

@end

NS_ASSUME_NONNULL_END
#import "XAPeople.h"

@implementation XAPeople

- (XAPeople* (^)(NSString *))set_xaName {
    return ^ XAPeople * (NSString *name) {
        self.name = name;
        return self;
    };
}

- (XAPeople * (^)(NSInteger))set_xaAge {
    return ^ XAPeople * (NSInteger age) {
        self.age = age;
        return self;
    };
}

- (XAPeople * (^)(void))eat {
    return ^ XAPeople * (void) {
        NSLog(@"干饭");
        return self;
    };
}

- (void)action1 {
    self.set_xaName(@"二蛋").set_xaAge(20).xa_eat();
}

@end

代码分析:

self.set_xaName(@"二蛋").set_xaAge(20).xa_eat();

首先调用

 self.set_xaName 

这个方法返回了一个Block对象

^ XAPeople * (NSString *name) {
        self.name = name;
        return self;
    };

然后向这个Block中传递一个参数 即 调用了这个Block

Block(@"二蛋")

执行Block内部代码

self.name = name;
return self;

执行后设置了自身的属性并返回了XAPerson类型的对象,以上就是self.set_xaName(@"二蛋")这句代码的拆分。
有了自身对象,就可以继续调用这个对象的其他方法,形成链式调用。

上一篇 下一篇

猜你喜欢

热点阅读