Objective-C实现一个基于数组下标[index]和字典[@"key"]的访问模式

//
//  MyArray.h
//  001-自己实现数组下标
//
//

#import <Foundation/Foundation.h>

@interface MyArray : NSObject
{
    @private
    NSMutableArray * mArray;
}

- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index;

- (id)objectAtIndexedSubscript:(NSUInteger)idx;

@end



//
//  MyArray.m
//  001-自己实现数组下标
//
//

#import "MyArray.h"

@implementation MyArray

- (instancetype)init {
    
    self = [super init];
    
    if (self) {
        
        self->mArray = [[NSMutableArray alloc] init];
        
        [self->mArray addObject:@"array 1"];
        
        [self->mArray addObject:@"array 2"];
        
        [self->mArray addObject:@"array 3"];
        
        [self->mArray addObject:@"array 4"];
        
    }
    
    return self;
}

//NSMutableArray
//实现这个可以通过下标赋值  array[2] = @"2";
- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index{
    const NSUInteger length = [mArray count];
    
    if(index > length)
        
        return;
    
    if(index == length)
        
        [mArray addObject:anObject];
    
    else
        
        [mArray replaceObjectAtIndex:index withObject:anObject];
    
}

//NSMutableArray  NSArray
//实现这个可以通过下标访问元素
- (id)objectAtIndexedSubscript:(NSUInteger)idx{
    
    if(idx >= [mArray count])
        
        return nil;
    
    return [mArray objectAtIndex:idx];
    
}

@end


//
//  MyDictionary.h
//  001-自己实现数组下标
//
//

#import <Foundation/Foundation.h>

@interface MyDictionary : NSObject
{
    @private
    NSMutableDictionary * mDict;
}

- (void)setObject:(id)object forKeyedSubscript:(id < NSCopying >)aKey;

- (id)objectForKeyedSubscript:(id)key;

@end



//
//  MyDictionary.m
//  001-自己实现数组下标
//
//

#import "MyDictionary.h"

@implementation MyDictionary

- (instancetype)init {
    
    self = [super init];
    
    if (self) {
        
        self->mDict = [[NSMutableDictionary alloc] init];
        
        [self->mDict setObject:@"dict 1" forKey:@"1"];
        
        [self->mDict setObject:@"dict 2" forKey:@"2"];
        
        [self->mDict setObject:@"dict 3" forKey:@"3"];
        
        [self->mDict setObject:@"dict 4" forKey:@"4"];
        
    }
    
    return self;
    
}

//通过key赋值
- (void)setObject:(id)object forKeyedSubscript:(id < NSCopying >)aKey{
    
    [mDict setObject:object forKey:aKey];
    
}

//通过key取值
- (id)objectForKeyedSubscript:(id)key{
    
    return [mDict objectForKey:key];
    
}

@end


测试代码:

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    
    
    MyArray * myarray = [[MyArray alloc] init];
    
    NSLog(@"%@", myarray[2]);
    
    myarray[2] = @"change array 2";
    
    NSLog(@"%@", myarray[2]);
    
    
    MyDictionary * mydict = [[MyDictionary alloc] init];
    
    NSLog(@"%@", mydict[@"2"]);
    
    mydict[@"2"] = @"change dict 2";
    
    NSLog(@"%@", mydict[@"2"]);
    
    
    
}


输出:

2016-06-20 16:04:06.485 001-自己实现数组下标[8751:2834015] array 3
2016-06-20 16:04:06.487 001-自己实现数组下标[8751:2834015] change array 2
2016-06-20 16:04:06.489 001-自己实现数组下标[8751:2834015] dict 2
2016-06-20 16:04:06.489 001-自己实现数组下标[8751:2834015] change dict 2








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值