Objective-C中通过下标的方式访问自定义数据模型中属性

Objective-C中通过下标的方式访问自定义数据模型中属性

      在Objective-C中,可以通过下标来访问数组中的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组中的元素进行赋值操作。例如:

?


1

2

3

4

    NSMutableArray * array = [[NSMutableArray alloc]init];

    array[0] = @"one";

    NSString * str = array[0];

    NSLog(@"%@",str);

       对于Objective-C中的字典对象,可以通过键值下标的方式来进行访问,例如:

?


1

2

3

    NSMutableDictionary * dic = [[NSMutableDictionary alloc]init];

    dic[@"name"] = @"name";

    NSLog(@"%@",dic[@"name"]);

      对于开发者自定义的的数据结构,一般会采用getter与setter方法来对其属性进行访问,虽然官方文档上没有提及,实际上,可以通过实现一些方法,来使自定义的数据模型支持使用下标来进行访问。

      创建一个数据模型类,使其继承自NSObject,如下:

MyModel.h

?


1

2

@interface MyModel : NSObject

@end

MyModel.m

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

@implementation MyModel

{

    NSString * _index0;

    NSString * _index1;

    NSString * _value;

}

//通过下标获取属性值

-(id) objectAtIndexedSubscript:(NSUInteger)idx {

    return [self valueForKey:[NSString stringWithFormat:@"_index%lu",idx]];

}

//通过下标设置属性值

 

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

    [self setValue:anObject forKey:[NSString stringWithFormat:@"_index%lu",index]];

}

//通过键值下标获取属性

-(id) objectForKeyedSubscript:(id)key {

    return [self valueForKey:key];

}

//通过键值下标设置属性

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

    [self setValue:object forKey:aKey];

}

@end

使用如下代码进行测试:

?


1

2

3

4

5

6

7

8

- (void)viewDidLoad {

    [super viewDidLoad];

    id model = [[MyModel alloc]init];

    model[@"_value"] = @"name";

    model[0] = @"one";

    model[1] = @"two";

    NSLog(@"%@,%@,%@",model[0],model[1],model[@"_value"]);

}

这里有一点需要注意,若使用下标访问属性这种方法,必须将model生命为id类型,否则会影响编译。

    在打印信息的可以看到,模型数据的设置和获取都没有问题,这种方法可以完全解放.h文件,如上所示,我们在数据模型的.h文件中一行代码都没有编写即可完成与MyModel模型数据的交互。然而其也有很大的弊端,代码的易调试和可读性都大大的降低,因此,没有特殊需求,一般不要使用这种方式来构建模型。

时间: 2024-10-30 13:00:38

Objective-C中通过下标的方式访问自定义数据模型中属性的相关文章

另类的方式访问Set集合中的元素

今天我的同学问了关于访问Set集合的元素问题,由于Set是无序的集合,所以不能根据下标去直接访问,需要进行一些处理,主要方法是将Set集合转换成数组 下面是代码 Java代码 package org.aiy.test; import java.util.HashSet; import java.util.Set; public class Test { /** * @param args */ public static void main(String[] args) { Set<Intege

Delphi中BDE直连方式访问Oracle的问题

用Delphi开发基于ORACLE平台的数据库管理信息系统过程中,连接ORACLE后台一般考虑两种方式,一种是用ORACLE公司提供的驱动,用ODBC方式来连接:一种是绕过ODBC,用BDE直连方式. 在ORACLE客户端配置连接字符串后,并在BDE中创建一个ORACLE的别名,并把该别名的SERVER_NAME设成ORACLE的连接串,然后就可以通过这个别名来访问ORACLE了).本文主要说说后一种连接方式. 我用Delphi4C/S(安装了对应的补丁程序)在开发基于TURBOLINUX+OR

c++的list能否在自定义类中使用

问题描述 c++的list能否在自定义类中使用 这是我的menusystem.h头文件,有的功能还没写完,我想在主菜单的b功能里面实现对这两个集合的遍历,我有另外两个头文件分别包含老师类和学生类. list::iterator() its; list::iterator() itt; 这两句会提示错误: error C2146: syntax error : missing ';' before identifier 'its' error C2501: 'its' : missing stor

详解Swift中的下标访问用法_Swift

Swift中的Array,Dictionary类型可以通过下标或者键值的方式来进行数据的访问,实际上在Swift的语法中,下标可以定义在类.结构体.枚举中.开发者可以通过下标的方式来对属性进行访问而不用使用专门的存取方法.并且定义的下标不限于一维,开发者可以定义多维的下标来满足需求. 下标的语法结构  下标使用subscript来定义,其有些类似于方法,参数和返回值本别作为下标入参和通过下标所取的值.但是在subscript实现部分,又十分类似于计算属性,其需要实现一个get块和可选实现一个se

JavaScript中访问id对象 属性的方式访问属性(实例代码)_javascript技巧

实例如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

我用https的方式访问我原来的应用,但是程序中的过滤器怎么突然进不去了?

问题描述 我有一个应用,原来用http的方式访问,服务器是tomcat,一切正常后来添加了ca证书登录的方式,用https访问,程序有好几个过滤器,第一个过滤器都正常走完了,但是最后用chain.dofilter()进入下一个过滤器的时候,就进不去了,各位大侠有知道为什么的吗?

在C#中使用代理的方式触发事件

事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件.所谓事件就是由某个对象发出的消息.比如用户按下了某个按钮,某个文件发生了改变,socket上有数据到达.触发事件的对象称作发送者(sender),捕获事件并且做出响应的对象称作接收者(receiver),一个事件可以存在多个接受者. 在异步机制中,事件是线程之间进行通信的一个非常常用的方式.比如:用户在界面上按下一个按钮,执行某项耗时的任务.程序此时启动一个线程来处

js中的对象声明方式以及数组的一些用法

 本文为大家介绍下js中的对象声明方式以及数组的一些用法,下面有个不错的示例,感兴趣的朋友可以参考下,希望对大家有所帮助  代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  <html>  <head>  <title> New Document &l

mfc-我已经通过MFC ODBC连上mysql数据库了,怎样以最简单的方式访问到数据?

问题描述 我已经通过MFC ODBC连上mysql数据库了,怎样以最简单的方式访问到数据? 已经连上mysql了,现在只需要读出数据库里的数据就行,希望能读出某一个字段中的所有值,按顺序这样读下来,存到我的程序里,怎么读最简单?本人比较菜,最好有易懂的代码,谢谢了 解决方案 就是select * from table这样的比较的理想 解决方案二: 参考:http://www.cnblogs.com/good90/archive/2012/03/04/2379371.htmlMFC通过ODBC连接