//
// 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