BLKFunctional 是一个小的库,它允许在 Objective-C 中稍微使用一些函数式编程风格。
在 NSArray 和 NSString 上的分类使用库前缀 "blk_",以避免命名空间冲突。分类添加了最少的功能以避免命名空间污染。
// Assuming the following array
NSArray *numberArray = @[@2, @9, @66];
// 1. Conjoin, can join arrays, sets, dictionaries and objects
NSArray *arr1 = [numberArray blk_conjoin:@6 and:@7 ]; // arr1 = @[@2, @9, @66, @6, @7]
NSArray *arr2 = [numberArray blk_conjoin:@[@6, @7] ]; // arr2 = @[@2, @9, @66, @6, @7]
NSString *str1 = [@"[2" blk_conjoin:@", 9" and:@", 66]"]; // str1 = @"[2, 9, 66]"
NSString *str2 = [@"[" blk_conjoin:numberArray interpose:@", " end:@"]" ];
// str2 = @"[2, 9, 66]"
// 2. Convenience expression macros
// Below, the type of argument "p1" is NSNumber, so ide code completion is available
NSArray *arr3 = [numberArray blk_map:BLKFnN(@([p1 doubleValue] + 2)) ];
// 3. Functions on NSArray
NSArray *arr4 = [numberArray blk_map:^(NSNumber *p1) {
return @([p1 doubleValue] + 2);
}];
// 4. (OR) If you absolutely can't have a category
NSArray *arr5 = [BLKFunction mapArray:numberArray withBlock:^(NSNumber *p1) {
return @([p1 doubleValue] + 2);
}];
// For category names and expression macros, #import BLKCatFunction.h
// (OR) To forgo categories, #import BLKFunction.h (and optionally, #import BLKMacro.h)
作为分类方法(带有前缀 "blk_")在 NSArray 中可用
作为分类方法(带有前缀 "blk_")在 NSString 中可用
此外,通过 BLKFunction.h 提供(如果您正在使用分类,则已导入)
枚举 "停止" 短路(类似于 enumerateObjectsUsingBlock:)。通过返回常量 BLKStopProcessing 可用于 map, reduce, fold