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(@"二蛋")这句代码的拆分。
有了自身对象,就可以继续调用这个对象的其他方法,形成链式调用。