前言
学习了前端 JavaScript 后,对其中的高阶函数那是赞叹不已。其中很多的思想其实在整个大前端是相通的、是可以借鉴的。因此特意将对应的高阶函数搬运到 iOS 平台,不仅可以简化代码,还可以提高 iOS 的开发效率,下面就举几个跟数组相关的典型例子。
Example
- Find
找到第一个满足测试函数条件的元素并返回那个元素的值,如果找不到,则返回 nil。
NSString *findItem = [list find:^BOOL(NSString * _Nonnull item) {
return [item isEqualToString:@"3"];
}];
- Some
如果数组中至少有一个元素满足测试函数条件,则返回 YES,否则返回 NO。
BOOL isVerifySome = [list some:^BOOL(NSString * _Nonnull item) {
return item.integerValue > 3;
}];
- Every
如果数组中的每个元素都满足测试函数条件,则返回 YES,否则返回 NO。
BOOL isVerifyEvery = [list every:^BOOL(NSString * _Nonnull item) {
return item.integerValue > 3;
}];
- Filter
将所有在过滤函数中返回 YES 的数组元素放进一个新数组中并返回。
NSArray *filterList = [list filter:^BOOL(NSString * _Nonnull item) {
return item.integerValue > 3;
}];
- Map
返回一个由回调函数的返回值组成的新数组。
NSArray *mapList = [list map:^id(NSString * _Nonnull item) {
NSNumber *obj = [NSNumber numberWithInteger:item.integerValue];
return obj;
}];
- Debounce
如果函数一直调用,则不会立即执行该函数,而是等待一段时间后, 确定没有新的函数调用时,它才执行一次。
fnBlock test = [NSObject debounceWithBlock:^{
NSLog(@"***********debounce*************");
} waitTime:3.0];
test();
test();
代码已经托管到github
网友评论