iOS-OC创建链式语法(链式编程)
来源:互联网 发布:网络黑白 百度文学 编辑:程序博客网 时间:2024/05/22 06:26
前言
我在工程中用到一个链式语法写的单利,有一个小伙伴对链式语法不是很清楚,瞬间感觉链式语法的高大上;我们也经常在一些第三方库里面看到链式语法。说到链式语法的好处,有如下几点:
1.习惯了OC括号语法,点语法给我的感觉是耳目一新,程序可以写出一点新异,而且点语法是最早最基础的语法结构,即:对象名.成员变量;
2.链式语法可读性比较强,接近自然语言,直接通过方法名就大致知道这个方法的作用;
3.精简代码;
实战
先给大家看一下我写的一个小demo,以单利的链式语法为例:
zvc和ZFJObjectShareInstance()是ZFJObject的实例化对象,“.”是对这个实例化对象的连续访问,而访问的是这个对象的一些方法,如add(20)里面的数字是参数。
代码
ZFJObject.h里面
#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface ZFJObject : NSObject//创建单利+ (instancetype)shareInstance;//销毁店里+ (void)destroyInstance;//加法@property (nonatomic,copy) ZFJObject *(^ add)(CGFloat num);//减法@property (nonatomic,copy) ZFJObject *(^ minus)(CGFloat num);//乘法@property (nonatomic,copy) ZFJObject *(^ multiply)(CGFloat num);//除法@property (nonatomic, copy) ZFJObject * (^divide)(CGFloat num);//获取运算结果@property (nonatomic, copy) ZFJObject * (^getResult)(void(^ getResultBlock)(CGFloat result));ZFJObject * ZFJObjectShareInstance(void);@end
ZFJObject.m里面
#import "ZFJObject.h"@interface ZFJObject ()@property (nonatomic,assign) CGFloat result;//保存结果@endstatic ZFJObject *_manager = nil;@implementation ZFJObject+ (instancetype)shareInstance{ static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ _manager = [[self alloc] init]; }); return _manager;}+ (void)destroyInstance { _manager = nil;}- (instancetype)init{ if(self == [super init]){ self.result = 0; } return self;}/** 加法 */- (ZFJObject *(^)(CGFloat num))add{ return ^(CGFloat num) { self.result += num; return [ZFJObject shareInstance]; };}/** 减法 */- (ZFJObject *(^)(CGFloat num))minus{ return ^(CGFloat num) { self.result -= num; return [ZFJObject shareInstance]; };}/** 乘法 */- (ZFJObject *(^)(CGFloat num))multiply{ return ^(CGFloat num) { self.result *= num; return [ZFJObject shareInstance]; };}/** 除法 */- (ZFJObject *(^)(CGFloat num))divide{ return ^(CGFloat num) { NSAssert(num != 0, @"除数不能为零!"); self.result /= num; return [ZFJObject shareInstance]; };}/** 结果 */- (ZFJObject *(^)(void(^ getResultBlock)(CGFloat result)))getResult{ return ^(void(^ getResultBlock)(CGFloat result)) { if(getResultBlock){ getResultBlock(self.result); } return [ZFJObject shareInstance]; };}- (void)dealloc{ NSLog(@"dealloc");}@endZFJObject * ZFJObjectShareInstance(void){ return [ZFJObject shareInstance];}
调用
ZFJObjectShareInstance().add(20).minus(2).multiply(2).divide(10).getResult(^(CGFloat result) { NSLog(@"result == %f",result); });
说明
如果我们想自己初始化一个对象,来实现链式语法只需要稍微修改一下就行,如:
/** 加法 */- (ZFJObject *(^)(CGFloat num))add{ return ^(CGFloat num) { self.result += num; return [ZFJObject shareInstance]; };}
改为:
/** 加法 */- (ZFJObject *(^)(CGFloat num))add{ return ^(CGFloat num) { self.result += num; return self; };}
然后调用:
ZFJObject *zvc = [[ZFJObject alloc]init]; zvc.add(20).minus(2).multiply(2).divide(10).getResult(^(CGFloat result) { NSLog(@"result == %f",result); });
推荐一个链式语法的约束库,一个朋友写的,简单好用,你不用再自己写约束条件,提高开发效率。
https://github.com/netyouli/WHC_AutoLayoutKit
阅读全文
0 0
- iOS-OC创建链式语法(链式编程)
- OC的链式语法
- oc block链式编程
- iOS 链式编程(Masonry)
- iOS 链式编程思想
- iOS--链式编程
- iOS中的链式编程
- iOS链式编程
- iOS-链式编程
- iOS 链式编程
- iOS链式编程
- 链式语法
- OC链式编程,一行代码写到黑!
- iOS利用block实现链式编程方法(Objective-C链式编程)
- 链式编程
- 链式编程
- 链式编程
- iOS 链式编程/函数式编程写法
- 自定义hibernate validation 注解
- 数组3个数乘积的最大值
- 最大子数组
- CS50 2016-Week3 学习笔记
- Head First Java 总结(三)
- iOS-OC创建链式语法(链式编程)
- JS小技巧-弹窗界面的js引用背景页面js中的变量。
- Ubuntu16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano
- llvm安装libclang3.9
- python中time和random模块的使用
- Fragment中多次调用onCreatView()导致异常问题的解析
- 11.多线程模型的echo服务器
- 关于chmod的两个用法
- 无数本高清古籍善本下载,200多个G