实现iOS中的链式编程
谈到链式编程,那Masonry几乎就是最经典的代表.如:
make.top.equalTo(self.view).offset()
像这样top.equalTo(self.view).offset(60)通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码简单易读,书写方便
1.传统写法,两个方法需要单独调用,也不能任意组合顺序
创建Person类
Person.h: - (void)eat1;
- (void)sleep1;
Person.m: - (void)eat1
{
NSLog(@"%s",__FUNCTION__);
}
- (void)sleep1
{
NSLog(@"%s",__FUNCTION__);
}
控制器中调用Person类中方法
ViewController.m: Person *person = [[Person alloc] init];
[person eat1];
[person sleep1];
2.用’[]’实现连续调用
Person.h: - (Person *)eat2;
- (Person *)sleep2;
Person.m: - (Person *)eat2
{
NSLog(@"%s",__FUNCTION__);
return self;
}
- (Person *)sleep2
{
NSLog(@"%s",__FUNCTION__);
return self;
}
ViewController.m: [[person eat2] sleep2];
[[person sleep2] eat2];
3.用block实现链式
//person.eat3相当于get方法(很妙的自己可以试一下)
Person.h: - (void (^)())eat3;
- (void (^)())sleep3;
Person.m: - (void (^)())eat3
{
//定义block
void (^eat3Block)() = ^ {
NSLog(@"%s",__FUNCTION__);
};
return eatBlock;
}
- (void (^)())sleep3
{
return ^ {
NSLog(@"%s",__FUNCTION__);
};;
}
ViewController.m: person.eat3();
person.sleep3();
4.实现 链式(无参)
Person.h: - (Person * (^)())eat4;
- (Person * (^)())sleep4;
Person.m: - (Person *(^)())eat4
{
Person * (^eat4Block)() = ^ {
NSLog(@"%s",__FUNCTION__);
return self;
};
return eat4Block;
}
//上下两种写法一样
- (Person *(^)())sleep4
{
return ^ {
NSLog(@"%s",__FUNCTION__);
return self;
};
}
ViewController.m: person.eat4().sleep4();
person.sleep4().eat4();
5.实现 链式(带参)
//person.eat3相当于get方法(很妙的自己可以试一下) 返回值是block 调用block需要传参数 int 调用block返回值是对象本身
Person.h: - (Person * (^)(NSString *foodName))eat5;
- (Person * (^)(NSInteger hour))sleep5;
Person.m: - (Person *(^)(NSString *))eat5
{
Person * (^eat5Block)() = ^(NSString *foodName) {
NSLog(@"吃: %@",foodName);
return self;
};
return eat5Block;
}
//上下两种写法一样
- (Person *(^)(NSInteger))sleep5
{
return ^(NSInteger hour) {
NSLog(@"睡了%ld小时",(long)hour);
return self;
};
}
ViewController.m: person.eat5(@"蛋糕").sleep5();
person.sleep5().eat5(@"面包");
实现iOS中的链式编程的更多相关文章
- Java 中的链式编程
前言 在写项目的时候,有一个实体类有好多个属性,new 出来之后需要不停的使用setXXX( )方法,效率低而且代码可读性差,查询了下发现可以实现实体类的链式编程. public class Us ...
- 由表单验证说起,关于在C#中尝试链式编程的实践
在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...
- java中的链式编程
听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...
- iOS端JSON转Model链式编程框架SuperKVC使用方法与原理
背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应 ...
- iOS开发技巧系列---使用链式编程和Block来实现UIAlertView
UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本 ...
- iOS利用block实现链式编程方法(Objective-C链式编程)
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...
- iOS 开发之使用链式编程思想实现简单的计算器
链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对 ...
- ios的链式编程笔记
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数 > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...
- 编程中的链式调用:Scala示例
编程中的链式调用与Linux Shell 中的管道类似.Linux Shell 中的管道 ,会将管道连接的上一个程序的结果, 传递给管道连接的下一个程序作为参数进行处理,依次串联起N个实用程序形成流水 ...
随机推荐
- Java NIO案例
Java 网络IO编程总结(BIO.NIO.AIO均含完整实例代码) http://blog.csdn.net/anxpp/article/details/51512200 Java NIO框架N ...
- win10 UWP Markdown 含源码
Windows下没有比較好的Markdown编辑器 我就自己写一个 csdn的Markdown非常好,就是我须要截图保存有麻烦 须要把我的截图保存在本地,然后上传 这个过程比較麻烦 csdn的图没法外 ...
- 如何去掉jQWidgets中TreeGrid和Grid右下角的链接
关于如何去掉这个水印,这是官方的说法. 更新了jQWidgets版本,发现在使用过程中发现每次渲染完TreeGrid和Grid后会在表格右下角出现一个www.jqwidgets.com的span标签. ...
- 每天一个linux命令:mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- Java Number类
一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 例如: int i = 5000; float gpa = 13.65; byte mask ...
- 和我一起学《HTTP权威指南》——Web服务器
Web服务器 Web服务器会做些什么 1.建立连接(接受或关闭一个客户端连接) 2.接收请求(读取HTTP报文) 3.处理请求(解释请求报文并采取行动) 4.访问资源 5.构建响应(创建带有正确首部的 ...
- es 5 数组reduce方法记忆
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 概念:对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并 ...
- mysql5.7 启动报发生系统错误2
1. http://dev.mysql.com/downloads/mysql/ 下载mysql5.7 zip包 2. 下载好后解压文件,解压的内容如图,您可以把内容解压到想要的位置 ...
- 使用editorconfig配置你的编辑器
摘要: 在团队开发中,统一的代码格式是必要的.但是不同开发人员使用的编辑工具可能不同,这样就造成代码的differ.今天给大家分享一个很好的方法来使不同的编辑器保持一样的风格. 不同的编辑器也有设置代 ...
- node.js--Less
摘要: 现在已经有许多站点使用Node.js,所以在Node.js上配置Less环境也是很重要的,下面分享下如何在Node上使用Less开发,前提是你电脑上已经安装node. 安装: 只需要执行下面一 ...