OCTotallyLazy 1.1.0

OCTotallyLazy 1.1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 Apache 2
发布最新发布2014年12月

未声明 维护。



  • 作者
  • Stuart Ervine

OCTotallyLazy - Objective-C 的功能扩展。

OCTotallyLazy 是一个框架,它为 Objective C 集合对象添加了功能行为,以及一个名为 Sequence 的懒加载集合对象。它是 Dan Bodart 的 TotallyLazy Java 库的局部移植版本,可在此处找到:http://code.google.com/p/totallylazy/

目前,查找完整行为的地方是最好的测试类,请查看 https://github.com/stuartervine/OCTotallyLazy/blob/master/src/test-unit/SequenceTest.m

将 OCTotallyLazy 导入到您的代码中。

import <OCTotallyLazy/OCTotallyLazy.h>

有什么可用的?

NSArray

drop:
dropWhile:
filter:
find:
flatMap:
flatten
fold: with:
foreach:
isEmpty
groupBy:
grouped:
head
headOption
join:
map:
mapWithIndex:
merge:
partition:
reduce:
reverse
splitAt:
splitOn:
splitWhen:
tail
take:
takeWhile:
takeRight:
toString
toString:
toString: separator: end:
zip:
zipWithIndex

asSequence
asSet
asDictionary

一些基本示例。

映射(Sequence,NSArray,部分在 NSSet,NSDictionary)

[sequence(@"one", @"two", @"three", nil) map:^(NSString *item){
    return [item uppercaseString];
}]
// returns sequence(@"ONE", @"TWO", @"THREE", nil)

[@[@"one", @[@"two"], @"three"] flatMap:^(NSString *item){
    return [item uppercaseString];
}];
// returns array(@"ONE", @"TWO", @"THREE", nil)

过滤(Sequence,NSArray,NSSet,NSDictionary)

[sequence(@"1", @"12", @"123", @"1234", nil) filter:^(NSString *item){
    return item.length > 2;
}]
//returns sequence(@"123", @"1234", nil)

选项

[Option option:@"something"];
//Outputs [Some some:@"something"];

[Option option:nil];
//Outputs [None none];

[[Option option:@"something"] map:^(NSString *item){
    return [item uppercaseString];
}];
//Outputs [Some some:@"SOMETHING"];

[Option option:nil] map:^(NSString *item){
    return [item uppercaseString];
}];
//Outputs [None none];

简写,对于完全懒加载

上面的示例仍然相当嘈杂。也存在简写语法。在框架导入上方包含以下内容:

#define TL_SHORTHAND
#define TL_LAMBDA
#define TL_LAMBDA_SHORTHAND
import <OCTotallyLazy/OCTotallyLazy.h>

然后你可以做一些有趣的事情,比如:

[sequence(num(1), num(2), num(3), nil) find:not(eqTo(num(1))]; //outputs [Some some:num(2)];

Lambda 疯狂

详尽

[sequence(@"bob", @"fred", @"wilma", nil) map:^(NSString *item){return [item uppercaseString];}] //outputs sequence(@"BOB", @"FRED", @"WILMA", nil)

更为合理

[sequence(@"bob", @"fred", @"wilma", nil) map:lambda(s, [s uppercaseString])] //outputs sequence(@"BOB", @"FRED", @"WILMA", nil)

有点疯狂(但有点像 scala)

[sequence(@"bob", @"fred", @"wilma", nil) map:_([_ uppercaseString])] //outputs sequence(@"BOB", @"FRED", @"WILMA", nil)

我喜欢它 - 怎么得到它?

所以我有点厌烦使用那些说“只是将我们的源代码包含到您的项目中”或“将我们的 Xcode 项目附加到您的项目中”的“库”。因此,要使用这个

  • 克隆仓库。
  • 运行 /build.sh test (可选,但如果失败就大声喊叫!)
  • 运行 /build.sh release
  • 将 /artifacts/OCTotallyLazy.framework 复制到您的外部库文件夹。
  • 将框架导入到项目中。
  • Jobsgood'un。