https://github.com/EasyReactFramework/EasyTuple
该库已过时。请移至ZTuple
为何需要它
有时候您可能需要返回除了单个值之外的多个值。在这些情况下,您可以使用指针,如 NSError **
,或者将它们放入数组或字典中,或者直接创建一个类。但现在您有了另一个选择,ZTuple,它可以以更好的方式组合多个值。
如何使用
您可以使用宏 ZTuple
来创建一个元组,并且它支持泛型。例如:
ZTuple3<NSNumber *, NSString *, NSDictionary> *tuple = ZTuple(@1, @"string", nil);
ZTuple3
表示在此元组中有 3 个项。因此 ZTuple6
是 6 个项。从 ZTuple1
到 ZTuple20
有 20 个类支持您使用。
ZTuple的最大容量为20。在大多数情况下已经足够大。如果您真的需要比这更大的东西,目前可能更好的选择是数组或字典。
您有多种方法来获取和设置值
ZTuple3<NSNumber *, NSString *, NSDictionary> *tuple = ZTuple(@1, @"string", nil);
// use the unpack macro
ZTupleUnpack(NSNumber *a, NSString *b, NSDictionary *c, Z_FromVar(tuple));
NSLog(@"first:%@, second:%@, last:%@", a, b, c);
// use ordinal numbers like first, second
tuple.first;
tuple.first = @5;
// use last
tuple.last;
tuple.last = @"last";
// use subscript
tuple[0];
tuple[0] = @"s";
// iteration
BOOL hasNil = NO;
for (id value in tuple) {
NSLog(@"%@", value);
if (value == nil) hasNil = YES;
tuple.first = @3 // will throw an exception!
}
// hasNil -> YES
元组中的最后一个元素是“最后一个元素”的别名,在上面的示例代码中,它等同于second
。
元组内所有元素都是Key-Value Observable。如果您观察second
和last
,当您改变second
(或last
)时,两个回调都将被调用。
ZTuple支持NSCopying
协议。如果您需要,可以轻松地复制它们。
功能
- ZTuple宏可快速创建元组
- 序数值属性
- 使用下标访问
- 使用for-in访问
- 支持NSScopy协议
- 删除某些项或取出某些项
- 合并两个元组
- 将元组转换为数组或将数组转换为元组
优势
与 NSArray / NSDictionary 相比,ZTuple具有以下优势
- 支持每种元素的泛型
- 支持 Key-Value Observable
- 支持
nil
- 通过序数字和
last
访问元素
致谢
此库深受libextobjc中宏技术的影响。
示例
要运行示例项目,请首先克隆repo,然后从示例目录运行pod install
。
要求
安装
ZTuple可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
pod "ZTuple"
作者
WilliamZang,[email protected]
JohnnyWu,[email protected]
许可
ZTuple在MIT许可下可用。有关更多信息,请参阅LICENSE文件。