美文网首页
让自定义的NSObject子类支持下标运算符

让自定义的NSObject子类支持下标运算符

作者: buptwsg | 来源:发表于2017-04-24 15:27 被阅读26次

NSArray, NSDictionary支持下标运算符,使用下标运算符,可以使代码看起来比较优雅,工程师也可以少输入很多字符。那么问题来了,能不能让我们自定义的类也支持下标运算符呢?答案是“可以”,并且实现起来很简单。

如果想支持索引下标,自定义的类需要实现如下两个方法:

- (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 TestSubscripting : 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

实现文件

@interface TestSubscripting ()

@property (nonatomic, strong) NSMutableArray *array;
@property (nonatomic, strong) NSMutableDictionary *dictionary;

@end

@implementation TestSubscripting

- (instancetype)init {
    self = [super init];
    if (self) {
        _array = [NSMutableArray array];
        _dictionary = [NSMutableDictionary dictionary];
    }
    
    return self;
}

- (id)objectAtIndexedSubscript:(NSUInteger)idx {
    return self.array[idx];
}

- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx {
    self.array[idx] = obj;
}

- (id)objectForKeyedSubscript:(id<NSCopying>)key {
    return self.dictionary[key];
}

- (void)setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key {
    self.dictionary[key] = obj;
}
@end

相关文章

  • 让自定义的NSObject子类支持下标运算符

    NSArray, NSDictionary支持下标运算符,使用下标运算符,可以使代码看起来比较优雅,工程师也可以少...

  • Swift 自定义下标

    Swift 是允许我们自定义下标的。这不仅包含了对自己写的类型进行下标自定义,也包括了对那些已经支持下标访问的类型...

  • iOSKVO的使用

    KVO的使用非常简单,使用KVO的要求是对象必须能支持kvc机制——所有NSObject的子类都支持这个机制。拿上...

  • Swift 2 学习笔记 16.下标和运算符重载

    课程来自慕课网liuyubobobo老师 下标 下标基础 多维下标 运算符重载 运算符重载基础 重载比较运算符 自...

  • KVC的基本方法

    继承自NSObject及其子类的对象都支持键值编码,并实现了NSKeyValueCoding协议的方法。该协议的实...

  • IBAnimatable转场动画-Explode学习

    阅读源码后可以发现,和一般自定义转场动画一致,新建继承 NSObject 子类,遵守 UIViewControll...

  • KVO

    使用KVO的要求是对象必须能支持kvc机制——所有NSObject的子类都支持这个机制。1.一般使用 2.如果一个...

  • python 运算符的重载

    什么是运算符重载: 让自定义的类生成的对象(实例)能够使用运算符进行操作 运算符重载的作用: 让自定义的实例像内建...

  • iOS-isa指针

    iOS所有对象的最终的父类都是NSObject,NSProxy不是NSObject的子类。NSObject有一个数...

  • Swift 中的继承

    继承方法、属性、其他特征(比如,下标)。还可以为继承来的属性添加属性观察器。 重写 子类可以提供自定义实现,包括,...

网友评论

      本文标题:让自定义的NSObject子类支持下标运算符

      本文链接:https://www.haomeiwen.com/subject/ufdpzttx.html