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 库.自己一直享受点语法带来的效 ...
随机推荐
- 激活函数--(Sigmoid,tanh,Relu,maxout)
Question? 激活函数是什么? 激活函数有什么用? 激活函数怎么用? 激活函数有哪几种?各自特点及其使用场景? 1.激活函数 1.1激活函数是什么? 激活函数的主要作用是提供网络的非线性建模能力 ...
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- For each loop in Native C++
今天发现 for each 语法居然可以直接编译通过,之前还以为只有开了/clr才可以支持.查了一下资料发现ms从vs2005就已经支持了.虽然不符合标准不过用着确实方便啊,必须记录一下. 具体看这里 ...
- 检查Rabbitmq中队列及消息个数,还有清空的方法
rabbitmqctl list_queues rabbitmqctl purge_queue kafka_queue (不推荐)使用reset方式重置rabbitmq即清空掉rabbitmq所有的队 ...
- 打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空.参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explo ...
- C# 使用委托实现多线程调用窗体的四种方式
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- Vim-一款好用的文本编辑器
关于vim的使用,通过博客,无论是静态的截图或者是代码/文本复制,很难展示所要表现的内容.更多需要读者亲自敲键盘实践之后才知道其作用. 本文不会也无法描述vim过多的细节,仅仅是对于常用的命令做一下记 ...
- 免费的ASP.NET空间和SQLServer2008 Express
Login Register Web Hosting Support Forum Ask Experts Articles ASP.NET 4.5 & SQL 2012 Hosting P ...
- SQLite中的表达式
SQLite中的表达式 在SELECT的基本完整形式中,我们会看到几乎是所有的子句都会使用到表达式.以下是SQLite支持的表达式类型. expr binary-op expr | ...
- Jekyll搭建github个人博客
一.安装ruby环境 Windows下载地址: http://rubyinstaller.org/ Ruby官网: http://www.ruby-lang.org/zh_cn/ 下载安装即可 环境配 ...