搜索
您的当前位置:首页正文

OC中的对象下标索引

来源:二三娱乐

相信对Swift有一定了解的人都知道它的下标语法.这个语法让类具备了像字典或者数组那样,利用下标获取一些东西的能力.但是,很多开发者或许不知道,OC中早就在Xcode4的时代,就已经有了这个语法.

OC中的对象下标语法

正如数组和字典, OC中的下标也分为了索引和键位.
索引下标需要声明和实现这两个方法:

- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;

键索引下标需要实现这两个方法:

- (id)objectForKeyedSubscript:(id <NSCopying>)key;
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;

这么说还是有些抽象, 现在来具体看个例子:

具体代码

@interface BlackBox : NSObject

- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;

- (id)objectForKeyedSubscript:(id <NSCopying>)key;
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;

@end

- (id)objectAtIndexedSubscript:(NSUInteger)idx{
  //做各种逻辑构造返回对象
    return @(idx);
}
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx{
    
}

- (id)objectForKeyedSubscript:(id <NSCopying>)key{
    NSString *condition = (NSString*)key;
    //做各种逻辑构造返回对象
    return condition;
}
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key{
    
}

然后使用方法:

    BlackBox *blackBox = [BlackBox new];
    id object1 = blackBox[1];
    id object2 = blackBox[@"all objects where value >= 100"];

使用场景

这个最好的感觉,就是封装细节.
现在比较火的路由,用这个方法去实现就比较好,例如:

routes[@"black module://rootController:23"] = ^(id param){
        //逻辑代码
}

和方法的对比

然后这个用方法来实现,也是okay的啊,为啥要用这个下标呢? 个人感觉,本身,我们编程工作,很大一部分的内容就是命名.而这个命名也是很容易出问题的地方.而下标的方式,让我们可以省去这个步骤.很简单的一个例子:
array[10][array objectAtIndex:10]你更愿意用哪个呢?

Top