文档章节

iOS 编程思想 链式编程思想

魔笛GNR
 魔笛GNR
发布于 2016/07/25 16:25
字数 716
阅读 44
收藏 1

先看个例子 - Masonry(布局框架)

Masonry简介:Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。

先来看看Masonry一个使用的小例子:

// ------- Masonry -------

// 创建控件
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];

// 设置控件的约束
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
    
    // 存放redView设置约束的代码
    make.left.top.equalTo(@10);
    make.right.bottom.equalTo(@-10);
    
}];

Masonry实现原理:

首先,给所有UIView提供一个设置约束的方法makeConstraints

makeConstraints的实现方法:

1.    创建约束制造者,约束制造者提供了很多设置约束的方法,每个制造约束(equalTo)的方法,方法不需要参数,但是必须返回block,每个block需要传入一个参数,计算值。

2.    把约束制造者传入block中,block用于把所有的约束保存到约束制造者中。

然后,执行block。

最后,利用约束制造者给view一次性添加所有约束。

例子中实现的是redView距离屏幕边距 10 。运行效果如下:

实践出真知 - 计算器

我们模仿Masonry,设计一个计算器,仿照它的编程思想,每一个操作都返回一个block:

首先,给所有类提供一个方法makeCaculator。

第二步,创建计算制造者,计算制造者提供很多计算方法(加减乘除),每个计算方法不需要参数,但必须返回block,每个block需要传入一个参数,计算。

第三步,传入block,用于把所有计算保存到计算制造这种,执行block。

最后,把计算制造者算的值,返回出去。

先来看看makeCaculator的实现:

@interface CaculatorMaker : NSObject

@property (nonatomic, assign) int result;

//加法
- (CaculatorMaker *(^)(int))add;
- (CaculatorMaker *(^)(int))sub;
- (CaculatorMaker *(^)(int))muilt;
- (CaculatorMaker *(^)(int))divide;

@end

实现计算制造者:


@implementation CaculatorMaker

- (CaculatorMaker *(^)(int))add{
    
    return ^CaculatorMaker *(int value) {
        
        self.result += value;
        
        return self;
    };
}

- (CaculatorMaker *(^)(int))muilt{
    
    return ^CaculatorMaker *(int value) {
        
        self.result *= value;
        
        return self;
    };
}

- (CaculatorMaker *(^)(int))sub{
    
    return ^CaculatorMaker *(int value) {
        
        self.result -= value;
        
        return self;
    };
}

- (CaculatorMaker *(^)(int))divide{
    
    return ^CaculatorMaker *(int value) {
        
        self.result /= value;
        
        return self;
    };
}

@end

给NSObject添加一个拓展方法( "NSObject+Caculator.h"):

@interface NSObject(Caculator)

//计算
+ (int)makeCaculator:(void(^)(CaculatorMaker * maker))caculatorMaker;

@end

实现方法:

@implementation NSObject(Caculator)

+ (int)makeCaculator:(void (^)(CaculatorMaker *))caculatorMaker{
    
    CaculatorMaker * maker = [[CaculatorMaker alloc]init];
    
    caculatorMaker(maker);
    
    return maker.result;
}

@end

设计好了之后,我们来算一个数学计算题( (1 + 2 + 3 + 4) / 5):

// ------- 计算器 -------
    
//(1 + 2 + 3 + 4) * 5
int result = [NSObject makeCaculator:^(CaculatorMaker *maker) {
       
    maker.add(1).add(2).add(3).add(4).muilt(5);
        
}];
    
NSLog(@"(1 + 2 + 3 + 4) * 5 = %d",result);

结果是 :

至此,我们了解了链式编程思想,小伙伴们快动手试试吧!

Demo地址:

https://github.com/ly918/Demos

© 著作权归作者所有

共有 人打赏支持
魔笛GNR
粉丝 6
博文 84
码字总数 42504
作品 0
郑州
iOS工程师
推荐几个牛逼的iOS开发常用框架及Xcode插件

管理工具 1. CocoaPods 搞iOS开发的应该都知道的,管理框架,并解决依赖问题。不可不用。下面用到的框架基本都可以用这个搜索和进行安装。怎么用搜搜教程就好了。和后文提到的配套使用,操作...

Harry_1234
2017/10/23
0
0
fir.im Weekly - 30 天从 0 开始学 Swift

最近一周看到很多很好用的的轮子,忍不住推荐给大家。此外,本期 fir.im Weekly 还精选了一些实用的 iOS , Android , UI 动画的干货文章。让我们一起来看下: Hacking with Swift 由@稀土圈...

风起云飞fir_im
2015/11/05
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0
一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者。本教程由 EntLib.com 团队编写。如有任何技术问题,欢迎留言。 电子版 – PDF 格式,支持iPhone、i...

entlib
2012/09/20
0
2
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS开发用到的图片尺寸汇总

启动图 型号 竖屏 横屏 iPhone SE 640px × 1136px 1136px × 640px iPhone 6s 750px × 1334px 1334px × 750px iPhone 6s Plus 1242px × 2208px 2208px × 1242px iPhone 7 750px × 1334......

业界小白
19分钟前
0
0
浅谈redis

redis是一个开源,内存式的健值存储数据库,也被称为健值存储的字典服务器。健值类型有字符串,hash(哈希类型),set(集合),list(列表) 和有序集合 特征细节: 内存式:redis将健值存储在主...

拐美人
26分钟前
0
0
无限扩容,按需使用!ZStack推出基于阿里云NAS的文件存储服务

日前,ZStack发布2.6.0版本,正式宣布推出基于阿里云NAS的文件存储服务。得益于业界领先的阿里云分布式存储架构,融合NAS后的ZStack 2.6.0拥有高性能、高可靠、容量无限扩展、一键操作、按需...

ZStack社区版
29分钟前
1
0
崛起于Springboot2.X之Mongodb多数据源处理(35)

多数据源:4个mongodb库! 目录结构图: 1、添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>......

木九天
34分钟前
0
0
如何获取显示器的EDID信息

Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果...

DB_Terrill
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部