OC 函数式编程和链式编程

函数式编程链式编程,可能大家在日常开发中都有接触过,第三方框架 Masonry 就是利用了这个方式。

函数式编程

OC 中函数式编程是通过 Block 的方式去实现的。下面,利用一个例子来讲解 函数式编程

要实现的功能:给一个字符串末尾拼接另外一个字符串(只是为了举例,利用函数式编程来实现)

    1. 新建一个 NSString 分类,分类代码如下:
    • .h 文件
    /// 在字符串的末尾附加另外一个字符串
    - (NSString *(^)(NSString *string))yxc_appendString;    
    
    • .m 文件
    /// 在字符串的末尾附加另外一个字符串
    - (NSString * _Nonnull (^)(NSString * _Nonnull))yxc_appendString {
        
        return ^(NSString *string) {
            
            return [self stringByAppendingString:string];
        };
    }
    
    1. 进行调用
    字符串拼接函数式编程的调用

    可以查看到结果,已经将另外一个字符串拼接到一起了,看到这里,也许心中有疑问,为什么这个方法声明和实现都没有参数,而在调用的时候却传了一个字符串过去?这是怎么做到的?

    如果有这个疑问,并且百思不得其解的话,下面在调用的时候,换一种方式去调用这个方法,或许就会豁然开朗。

    函数式编程实际的调用流程

    通过以上的方式调用,发现 string.yxc_appendString(@"的使用") 实际上就是一个 block 的调用。因为 yxc_appendString 方法返回的就是一个 block,再加上直接调用就简写成了这种方式。因为 yxc_appendString 是一个方法,而且是一个无参数的方法的原因,导致在看到 string.yxc_appendString(@"的使用") 时,第一反应就是方法的调用,并且 (@"的使用")是一个参数。但是实际上是因为 yxc_appendString 方法的格式跟 OC 中的 getter 方法的格式是一样,所以在这里直接使用点语法,调用这个方法。如果 yxc_appendString 添加了一个参数是无法用 点语法 的。

函数式编程OC 的使用就是以上的方式,下面讲解 链式编程 的使用。

链式编程

上面刚实现的 yxc_appendString 这个方法就已经满足了 链式编程,因为这个方法 block 内部返回的就是一个 NSString 类型,所以可以继续调用本身的 yxc_appendString 方法。下面直接看使用方式:

OC 链式编程的使用

在这里,拼接完 的使用 这个字符串的时候,继续直接拼接 ,iOS 链式编程的使用,最后结果也如预期结果。

以上就是 函数编程链式编程 的简单使用。

你可能感兴趣的:(OC 函数式编程和链式编程)