ios – 使用NSIndexPath访问嵌套元素

是否真的没有使用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“一起工作”.它足够通用,可用于多种数据结构.

点赞