iOS:用Block写一个链式编程
一、介绍
链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服。目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架。
二、写法
链式编程写法不同于传统方式,初次写起来比较别扭,但是一旦习惯了,用起来比较得心应手。那么,如何写呢?其实就是一个对象调用它的实例方法后返回一个block(已经定义过),而这个block内部又返回该对象。依此类推,该对象不论调用多少个它的实例方法,最终都会返回该对象本身。
三、实例
LearnManager类定义和实现
//
// LearnManager.h
// ChainProgramming
//
// Created by 夏远全 on 2017/9/30.
// Copyright © 2017年 夏远全. All rights reserved. #import <Foundation/Foundation.h> /**
定义block,返回值类型是LearnManager对象
*/
@class LearnManager;
typedef LearnManager *(^LearnChineseBlock)(NSString *chineseName);
typedef LearnManager *(^LearnEnglishBlock)(NSString *englishName);
typedef LearnManager *(^LearnFranchBlock) (NSString *franchName); @interface LearnManager : NSObject /**
定义对象方法
@return 返回值是定义过的block
*/
-(LearnChineseBlock)learnChinese;
-(LearnEnglishBlock)learnEnglish;
-(LearnFranchBlock)learnFranch; @end
//
// LearnManager.m
// ChainProgramming
// Created by 夏远全 on 2017/9/30.
// Copyright © 2017年 夏远全. All rights reserved.
#import "LearnManager.h" @implementation LearnManager -(LearnChineseBlock)learnChinese{ //外部返回一个block
return ^LearnManager *(NSString *chineseName){ NSLog(@"%@", [NSString stringWithFormat:@"学习%@!",chineseName]); //内部block返回一个LearnManager对象
return self;
}; } -(LearnEnglishBlock)learnEnglish{ //外部返回一个block
return ^LearnManager *(NSString *englishName){ NSLog(@"%@", [NSString stringWithFormat:@"学习%@!",englishName]); //内部block返回一个LearnManager对象
return self;
};
} -(LearnFranchBlock)learnFranch{ //外部返回一个block
return ^LearnManager *(NSString *franchName){ NSLog(@"%@", [NSString stringWithFormat:@"学习%@!",franchName]); //内部block返回一个LearnManager对象
return self;
};
} @end
ViewController类导入并调用
//
// ViewController.m
// ChainProgramming
//
// Created by 夏远全 on 2017/9/30.
// Copyright © 2017年 夏远全. All rights reserved.
// #import "ViewController.h"
#import "LearnManager.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; LearnManager *learn = [[LearnManager alloc] init]; //learn对象首先调用方法返回一个block,然后给block传入字符串参数并调用,于是又返回了该对象learn本身
learn.learnChinese(@"语文").learnEnglish(@"英语").learnFranch(@"法语");
} @end
四、打印
-- ::10.288 ChainProgramming[:] 学习语文!
-- ::10.288 ChainProgramming[:] 学习英语!
-- ::10.289 ChainProgramming[:] 学习法语!
iOS:用Block写一个链式编程的更多相关文章
- 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当函数的返回参数 // 之前开发中比较习惯 ...
- 模仿Masonry链式编程思想
使用masonry 也将近一年多了,它的链式编程方式一直是很吸引我的. 之前一直没空好好思考它是如何实现,直到现在正好自己有空,因此写下链式编程的基本思路. 链式基本的编程形式如 a.property ...
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
- (一一八)利用block实现链式编程
有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写 ...
- [Objective-C]用Block实现链式编程
看这篇博客时最快让你上手ReactiveCocoa之基础篇看到作者介绍链式编程那一块,发现自己的钻研精神不足.想想自己使用链式编程也有段时间了,对,就是 Masonry 库.自己一直享受点语法带来的效 ...
随机推荐
- dispatchers 设置
Oracle连接方式(dispatchers 设置) oracle 响应客户端请求有两种方式: 1 专有连接:用一个服务器进程响应一个客户端请求 2 共享连接:用一个分派器(dispatcher)响应 ...
- vue2之对象属性的监听
对象属性监听的两种方法: 1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValu ...
- jvm字节占用空间分析
一个对象实例占用了多少字节,消耗了多少内存?这样的问题在c或c++里使用sizeof()方法就可以得到明确答案,在java里好像没有这样的方法(java一样可以实现),不过通过jmap工具倒是可以查看 ...
- linux下的文件结构
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令/dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如 ...
- hdu3183 rmq求区间最值的下标
两个月前做的题,以后可以看看,是rmq关于求区间最值的下标 /* hdu3183 终点 给一个整数,可以删除m位,留下的数字形成一个新的整数 rmq 取n-m个数,使形成的数最小 */ #includ ...
- (二)使用CXF开发WebService服务器端接口
CXF作为java领域主流的WebService实现框架,Java程序员有必要掌握它. CXF主页:http://cxf.apache.org/ 简介:百度百科 今天的话,主要是用CXF来开发下Web ...
- 【C++ Primer 第11章】4. 无序容器
一.介绍 1. Hashtable和bucket 由于unordered_map内部采用的hashtable的数据结构存储,所以,每个特定的key会通过一些特定的哈希运算映射到一个特定的位置,我们知道 ...
- 详解如何进行第三方App接入微信登录
微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...
- android app 流量统计
https://blog.csdn.net/yzy9508/article/details/48300265 | android 数据流量统计 - CSDN博客https://blog.csdn.ne ...
- Android Studio之导出JavaDoc出现编码GBK的不可映射字符
使用Android Studio导出JavaDoc时,如果在注释中添加了中文,生成时的时候会出现错误: 编码GBK的不可映射字符. 解决的办法是在Other command line argument ...