函数式编程 和 链式编程,可能大家在日常开发中都有接触过,第三方框架 Masonry 就是利用了这个方式。
函数式编程
OC
中函数式编程是通过 Block
的方式去实现的。下面,利用一个例子来讲解 函数式编程。
要实现的功能:给一个字符串末尾拼接另外一个字符串(只是为了举例,利用函数式编程来实现)
-
- 新建一个
NSString
分类,分类代码如下:
- .h 文件
/// 在字符串的末尾附加另外一个字符串 - (NSString *(^)(NSString *string))yxc_appendString;
- .m 文件
/// 在字符串的末尾附加另外一个字符串 - (NSString * _Nonnull (^)(NSString * _Nonnull))yxc_appendString { return ^(NSString *string) { return [self stringByAppendingString:string]; }; }
- 新建一个
-
- 进行调用
字符串拼接函数式编程的调用
可以查看到结果,已经将另外一个字符串拼接到一起了,看到这里,也许心中有疑问,为什么这个方法声明和实现都没有参数,而在调用的时候却传了一个字符串过去?这是怎么做到的?
如果有这个疑问,并且百思不得其解的话,下面在调用的时候,换一种方式去调用这个方法,或许就会豁然开朗。
函数式编程实际的调用流程
通过以上的方式调用,发现
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
方法。下面直接看使用方式:

在这里,拼接完 的使用
这个字符串的时候,继续直接拼接 ,iOS 链式编程的使用
,最后结果也如预期结果。
以上就是 函数编程 和 链式编程 的简单使用。
网友评论