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

原创 2016年06月20日 16:05:16
//
//  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








版权声明:本文为博主原创文章,未经博主允许不得转载。

Objective-C如何自己实现一个基于数组下标的属性访问模式

在iOS6.0以及OS X10.8之后,Apple引入了一套非正式协议(informal protocol)与Objective-C语法直接绑定。当你实现了这其中的方法之后即可使用数组下标来访问属性元...
  • likendsl
  • likendsl
  • 2015年03月27日 09:53
  • 2760

Vector用数组下标访问的条件

vector实现数组访问的条件通过两段代码测试,我们得出原则就是数组下标[]访问,前提就是这样的元素是存在的,就可以使用这样的访问形式,vector容器是重载了数组的访问形式。这一点程序员务必要小心,...
  • Touch_Dream
  • Touch_Dream
  • 2017年07月14日 16:08
  • 274

Objective-C 省市区 字典 封装

//整体原理思路:          //一个大数组,包含省字典     //省字典包含 省名字,下属市数组     //市数组包含市字典     //市字典包含 市名字,下属区数组   ...
  • seal82
  • seal82
  • 2015年07月28日 08:40
  • 576

[精通Objective-C] 使用自定义下标模拟32位计算机寄存器操作

[精通Objective-C] 使用自定义下标模拟32位计算机寄存器操作参考书籍:《精通Objective-C》【美】 Keith Lee目录精通Objective-C 使用自定义下标模拟32位计算机...
  • sps900608
  • sps900608
  • 2016年07月15日 16:02
  • 2069

MySQL中Index与Key的区别

看似有差不多的作用,加了Key的表与建立了Index的表,都可以进行快速的数据查询。 他们之间的区别在于处于不同的层面上。 Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key...
  • ljabclj
  • ljabclj
  • 2015年03月24日 09:07
  • 3831

Mysql索引详解及优化(key和index区别)

MySQL索引的概念     索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据...
  • oChangWen
  • oChangWen
  • 2017年01月03日 17:21
  • 8778

在自定义cell上获取当前下标

在iOS7下面已经无效,因为iOS7的层级关系发生变化 UITableViewCell->UITableViewCellScrollView->UITableViewCellContentVie...
  • u013073524
  • u013073524
  • 2014年06月11日 09:23
  • 1163

在Objective-C声明Block的几种方式

转自微信公众号:iOS笔记 在Objective-C声明Block的几种方式 1、作为局部变量 returnType (^blockName)(par...
  • hong9471
  • hong9471
  • 2016年05月18日 09:58
  • 167

Vue2.0中v-for迭代语法变化(key、index)

Vue2.0中,v-for迭代语法已经发生了变
  • sinat_35512245
  • sinat_35512245
  • 2017年01月01日 16:36
  • 20480

关于mysql中的key和index

1. 官方文档:http://dev.mysql.com/doc/refman/5.5/en/create-table.html KEY is normally a synonym ...
  • skyman_2001
  • skyman_2001
  • 2013年05月22日 12:27
  • 1708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-C实现一个基于数组下标[index]和字典[@"key"]的访问模式
举报原因:
原因补充:

(最多只允许输入30个字)