是否真的没有使用NSIndexPath遍历/访问iOS SDK中的嵌套数组结构的API?我查看了NSIndexPath和NSArray的文档?
例如:
NSArray *nested = @[
@[
@[@1, @2], @[@10, @20]
],
@[
@[@11, @22], @[@110, @220]
],
@[
@[@111, @222], @[@1110, @2220]
]
];
如果我想模拟@ 222的访问路径,我可以组装:
NSIndexPath *path = [[[NSIndexPatch indexPathWithIndex: 2] indexPathByAddingIndex: 0] indexPathByAddingIndex: 1];
那么我必须编写自己的递归访问器吗?
id probe = nested;
for (NSInteger position = 0; position < path.length; position++) {
probe = probe[path indexAtPosition: position];
}
让我感到惊讶的是,Apple实际上对这个构造进行了建模,但是没有提供API来将两者结合在一起.我希望NSArray或NSIndexPath上的方法允许一个人做类似的事情:
id value = [nested objectAtIndexPath: path];
或者也许有一种我不知道的更惯用的扭曲?
更新:
我选择遵循@CrimsonChris的建议并整理以下内容:
NSArray NestedAccess.h
#import <Foundation/Foundation.h>
@interface NSObject (NestedAccess)
- (id) objectAtPath: (NSIndexPath*) path;
@end
NSArray NestedAccess.c
#import "NSArray+NestedAccess.h"
@implementation NSArray (NestedAccess)
- (id) objectAtPath: (NSIndexPath*) path {
id probe = self;
for (NSInteger position = 0; position < path.length; position++) {
probe = ((NSArray*)probe)[path indexAtPosition: position];
}
return probe;
}
@end
最佳答案 听起来你想要一个NSIndexPath类别! NSIndexPath不适合与NSArrays“一起工作”.它足够通用,可用于多种数据结构.