文档章节

自定义类实现基于数组/字典Literal Syntax设置和获取数据

Gerry1218
 Gerry1218
发布于 2015/06/03 10:58
字数 192
阅读 35
收藏 0

.h文件

#import <Foundation/Foundation.h>

@interface TestKVC : NSObject {
    
    NSMutableDictionary *mDictionary;
    NSMutableArray *mArray;
}

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

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

@end

.m文件

#import "TestKVC.h"

@implementation TestKVC

- (id)init {
    
    self = [super init];
    if (self) {
        mArray = [NSMutableArray array];
        mDictionary = [NSMutableDictionary dictionary];
    }
    
    return self;
}

- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index {
    [mArray insertObject:anObject atIndex:index];
}

- (id)objectAtIndexedSubscript:(NSUInteger)idx {
    return [mArray objectAtIndex:idx];
}

- (void)setObject:(id)object forKeyedSubscript:(id < NSCopying >)aKey {
    [mDictionary setObject:object forKey:aKey];
}

- (id)objectForKeyedSubscript:(id)key {
    return [mDictionary objectForKey:key];
}

@end


使用

    TestKVC *test = [[TestKVC alloc] init];
    test[@"key"] = @"Hello";
    id value = test[@"key"];
    
    [test setObject:@"World" forKeyedSubscript:@"key0"];
    id value0 = [test objectForKeyedSubscript:@"key0"];
    
    NSLog(@"%@ %@", value, value0);  // Hello World
    
    
    test[0] = @"Hello";
    test[1] = @"World";
    
    id v0 = test[0];
    id v1 = test[1];
    
    NSLog(@"%@  %@", v0, v1);         // Hello World


© 著作权归作者所有

Gerry1218
粉丝 9
博文 80
码字总数 15073
作品 1
杭州
程序员
私信 提问
Prefer Literal Syntax over the Equivalent methods

多使用字面量语法,少用和它等价的方法。从 Objective-C 1.0 开始,使用“字符串字面量”来创建 NSString 对象会更加简单。 NSString *someString = @"Effective Objective-C 2.0"; // 不使用...

Herbert77
2015/09/02
4
0
(原理篇)基于SQLite3轻量级封装,一行代码实现增删改查

最近写的项目中有用到数据库,写了不少蛋疼的sql语句,每次都是好几行代码,而且每次都是重复的没有一点技术含量的代码,虽然也有不少基于sqlite的封装,不过用起来还是感觉不够面向对象! 为了不再...

秦无炎
2016/07/25
22
0
Runtime- 结合Demo, 让你轻松搞定

关于的学习资料网上有很多了,但是大部分看起来有些晦涩难懂,看过一遍后让人感觉有些走马观花, 还是理解不透.所以趁着这几天的空闲时间, 我对自己理解的总结了一下,专门写了一个, 主要讲一...

直男程序员
2018/11/11
0
0
iOS开发·runtime+KVC实现多层字典模型转换(多层数据:模型嵌套模型,模型嵌套数组,数组嵌套模型)

本文实验Demo传送门:DictToModelDemo 前言:将后台JSON数据中的字典转成本地的模型,我们一般选用部分优秀的第三方框架,如SBJSON、JSONKit、MJExtension、YYModel等。但是,一些简单的数据...

陈满iOS
2018/05/08
0
0
跟着MJExtension实现简单的字典转模型框架 - 简书

演示代码地址:https://github.com/codeWillwillCode/LearnMJExtension 最简单的字典 首先,从最简单的字典开始. NSDictionary *dict = @{ @"name" : @"Jack", @"icon" : @"lufy.png", @"age" ......

Daniel_s
2016/01/07
392
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针操作文件 柔性数组使用

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _info* pInfo;struct _info{int line;int len;char data[0];}info;int getFil......

小张525
35分钟前
0
0
中介者模式

https://blog.csdn.net/jason0539/article/details/45216585

南桥北木
35分钟前
0
0
抽离css以及公共js

分离css 分离css:为何要把 CSS 文件分离出来,而不是直接一起打包在 JS 中。最主要的原因是我们希望更好地利用缓存。 extract-text-webpack-plugin > 1. 假设我们原本页面的静态资源都打包成...

莫西摩西
今天
1
0
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的。 如何设置才能让出来呢? 1:打开"系统管理"——"Configure Global Sec...

shzwork
今天
2
0
BAT面试必问HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈...

别打我会飞
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部