codecamp

IOS使用高阶函数进行函数式编程

高阶函数”是函数式编程中的关键的知识。从维基百科的解释来看,一个高阶函数应该达到以下的两个要求:

  • 一个或者多个函数作为输入。
  • 有且仅有一个函数输出。

在Objective-c中我们经常使用block作为函数。我们不需要跋山涉水地去寻找“高阶函数”,实际上,Apple为我们提供的Foundation库中就有。考虑象下面这么简单的一个NSNumber 的数组:

 NSArray * array = @[ @(1), @(2), @(3) ];

我们想要枚举这个数组的内容,利用数组元素来做些事情。

我们可以用一个NSArray的高阶函数来代替for循环。代码如下:

for (NSNumber *number in array) NSLog(@"%@",number);

。。。这个等同于下面的高阶函数:

[array enumerateObjectsUsingBlock:^(NSNumber *number, NSUInteger idx, BOOL *stop)
{
    NSLog(@"%@",number);
}];

"为什么?","这代码不是更多了吗?".

好吧,确实是这样,但这是通往函数式编程道路上的第一步:函数的启蒙教育。就像上一章节所说的,如何在只关注任务本身的前提下去完成任务?这只是为即将到来的便利付出的一点点代价,相信我。

实际上,高阶函数是很抽象的东西,我们所做的事情(命令式编程)基本上都可以用它来抽象。但Foundation中高阶函数的程度很低,要了解更多,我们不得不借助开源社区。


IOS函数式反应型编程结论
IOS如何使用RXCollections?
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }