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

来源:互联网 发布:java excel预览 编辑:程序博客网 时间:2024/06/11 04:13
////  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 32016-06-20 16:04:06.487 001-自己实现数组下标[8751:2834015] change array 22016-06-20 16:04:06.489 001-自己实现数组下标[8751:2834015] dict 22016-06-20 16:04:06.489 001-自己实现数组下标[8751:2834015] change dict 2








0 0