一、首先看Masonry经典的代表性代码块
- (void)masDemo{
//Masonry经典的代表
UIView *view = [[UIViewalloc]init];
view.backgroundColor = [UIColorcyanColor];
[self.viewaddSubview:view];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
//1.函数式编程:通过‘()’去调用函数,一般调用完返回的对象还是这个对象本身,就是函数式编程。
//equalTo(...).offset(...)...().()
//2.链式编程:通过‘点’语法,将需要执行的代码块连续的书写下去的,就是链式编程。
//equalTo(self.view).offset(40)...
make.top.equalTo(self.view).offset(40);
make.size.mas_offset(CGSizeMake(100,100));
make.centerX.equalTo(self.view).offset(-40);
}];
}
二、函数调用的传统写法,两个方法单独调用,也不能随意的组合顺序。@interface Person :NSObject
- (void)running;
- (void)eatSomething;
@end
@implementation Person
- (void)running{
NSLog(@"%s",__FUNCTION__);
}
- (void)eatSomething{
NSLog(@"%s",__FUNCTION__);
}
@end
在ViewController调用Person类的时候Person *person = [Personnew];(以下省略Person对象的创建)
[person running];
[person eatSomething];
三、用‘[]’实现连续调用。runn和eat两个方法如下:- (Person *)runn;
- (Person *)eat;
此时方法实现中需要返回的是两个对象本身- (Person *)runn{
NSLog(@"%s",__FUNCTION__);
return self;
}
- (Person *)eat{
NSLog(@"%s",__FUNCTION__);
return self;
}
在调用的时候,需要使用‘[]’连续调用,此方法为链式编程1‘ id obj1 = [person runn];
[obj1 eat];
id obj2 = [person eat];
[obj2 runn];
2’ [[person runn]eat];
方法名如下:
//如果要实现函数式编程,需要返回‘block’
- (Person * (^)())runn2;
- (Person *(^)())eat2;
实现方法如下:- (Person * (^)())runn2{
NSLog(@"%s",__FUNCTION__);
Person * (^runBlock)() = ^{
NSLog(@"跑男");
returnself;
};
return runBlock;
}
- (Person * (^)())eat2{
NSLog(@"%s",__FUNCTION__);
return ^{
NSLog(@"吃2");
returnself;
};
}
在ViewController调用如下person.runn2().runn2().eat2().eat2();
//返回block可以接参数
- (Person *(^)(NSString *food))eat3;
- (Person *(^)(double distance))run3;
方法的实现如下- (Person *(^)(NSString *))eat3{
return ^(NSString *food){
NSLog(@"吃3%@",food);
returnself;
};
}
- (Person *(^)(double))run3{
return ^(double distance){
NSLog(@"跑3 %lf",distance);
returnself;
};
}
方法的调用如下
person.run3(1000).eat3(@"water").run3(10000).eat3(@"wind");
/*
关于链式编程和函数式编程的进一步理解
1.自己封装框架
2.阅读其他人的框架
*/
新闻热点
疑难解答