链式编程初试

    xiaoxiao2026-05-14  8

    链式编程思想: 将多行操作通过 “.” 连接成一句代码, 使代码可读性好, 比如: a(1).b(2).c(3), 代表性的就是Masonry 链式编程特点: 方法的返回值是block, block必有返回值(自身对象), block参数(操作对象)

    先简单介绍下目前咱们已知的编程思想。

    1 面向过程:处理事情以过程为核心,一步一步的实现。

    2 面向对象:万物皆对象

    3 链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)

    链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

    代表:Masonry框架。

    4 响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。

    代表:KVO运用。 5 函数式编程思想:是把操作尽量写成一系列嵌套的函数或者方法调用。

    函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)

    代表:ReactiveCocoa。

    用函数式编程实现,写一个加法计算器,并且加法计算器自带判断是否等于某个值.

    // 一个计算器 #import <Foundation/Foundation.h> #import "CaculatorMaker.h" /** * 链式编程初试, */ @interface NSObject (CaculatorMaker) + (int)makeCaculators:(void(^)(CaculatorMaker *make))caculatorMaker; @end #import "NSObject+CaculatorMaker.h" @implementation NSObject (CaculatorMaker) + (int)makeCaculators:(void (^)(CaculatorMaker *))caculatorMaker { CaculatorMaker *cal = [[CaculatorMaker alloc] init]; caculatorMaker(cal); return cal.result; } @end #import <Foundation/Foundation.h> @interface CaculatorMaker : NSObject @property(nonatomic, assign)int result; - (CaculatorMaker *(^)(int))add; - (CaculatorMaker *(^)(int))sub; - (CaculatorMaker *(^)(int))multi; - (CaculatorMaker *(^)(int))divide; @end #import "CaculatorMaker.h" @implementation CaculatorMaker - (CaculatorMaker *(^)(int))add { return ^(int num){ self.result += num; return self; }; } - (CaculatorMaker *(^)(int))sub { return ^(int num) { self.result -= num; return self; }; } - (CaculatorMaker *(^)(int))multi { return ^(int num) { self.result = self.result * num; return self; }; } - (CaculatorMaker *(^)(int))divide { return ^(int num) { self.result = self.result / num; return self; }; } @end // 调用: int result = [NSObject makeCaculators:^(CaculatorMaker *make) { make.divide(2).add(3).sub(1); }]; NSLog(@"result: %d", result);

    再来一个例子

    #import <Foundation/Foundation.h> @class ChainStyleManager; typedef ChainStyleManager *(^ChainStyleVoidBlock)(); typedef ChainStyleManager *(^ChainStyleStringBlock)(NSString *); @interface ChainStyleManager : NSObject - (ChainStyleVoidBlock)begin; - (ChainStyleVoidBlock)firstBlock; - (ChainStyleStringBlock)secondBlock; @end #import "ChainStyleManager.h" @implementation ChainStyleManager - (ChainStyleVoidBlock)begin { return ^ChainStyleManager *(){ NSLog(@"begin"); return self; }; } - (ChainStyleVoidBlock)firstBlock { return ^ChainStyleManager *() { NSLog(@"first block"); return self; }; } - (ChainStyleStringBlock)secondBlock { return ^ChainStyleManager *(NSString *str) { NSLog(@"second block: %@", str); return self; }; } @end

    调用

    ChainStyleManager *chainMgr = [[ChainStyleManager alloc] init]; chainMgr.begin().firstBlock().secondBlock(@"3");
    转载请注明原文地址: https://ju.6miu.com/read-1309683.html
    最新回复(0)