如何在Xcode4.4中使用Objective-C的对象下标表示法
2013-07-16 12:37
246 查看
Xcode4.4引入了LLVM 4.0编译器,该编译器为Objective-C提供了一些增强特性,下标表示法就是其中之一。大大简化了容器变量的使用,同时又很好地增强了可读性。让我们看一看下面这段代码:
第一句代码,是另一个新的特性—字面量表示法,数组对象以后可以使用这种方式直接构建。
第二句和第三句代码等价,第三句代码就使用了下标表示法,这样看是不是比原来的写法简单多了。
这里要特别提一下,如果你开发的是MacOS的应用,那么下标表示法可以直接使用了。但是如果你开发的是iOS,那么很不幸,在Xcode4.4中还不能为开发iOS的应用,直接使用下标表示法。原因在于,iOS的SDK还没有像MacOS的SDK那样完整实现了所有新特性。不过,我们可以通过添加一个Category的方式来获取下标表示法的能力。代码如下:
将这段代码封在NSObject+subscripts.h文件中,在需要使用下标表示法的文件中include即可。
警告:因为引入了这个头文件,所有的对象都自动获取了下标表示法的能力。但是并不是所有的对象都能正常运行下标表示法。一般情况下,容器类对象(如NSArray、NSDictionary等),可以正常运行。
以下代码可以正确执行。
不能正确执行。
NSArray * array = @[@"a", @"b", @"c"]; NSLog(@"%@", [array objectAtIndex:0]); NSLog(@"%@", array[0]);
第一句代码,是另一个新的特性—字面量表示法,数组对象以后可以使用这种方式直接构建。
第二句和第三句代码等价,第三句代码就使用了下标表示法,这样看是不是比原来的写法简单多了。
这里要特别提一下,如果你开发的是MacOS的应用,那么下标表示法可以直接使用了。但是如果你开发的是iOS,那么很不幸,在Xcode4.4中还不能为开发iOS的应用,直接使用下标表示法。原因在于,iOS的SDK还没有像MacOS的SDK那样完整实现了所有新特性。不过,我们可以通过添加一个Category的方式来获取下标表示法的能力。代码如下:
@interface NSObject(subscripts) - (id)objectAtIndexedSubscript:(NSUInteger)idx; - (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx; - (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key; - (id)objectForKeyedSubscript:(id)key; @end
将这段代码封在NSObject+subscripts.h文件中,在需要使用下标表示法的文件中include即可。
警告:因为引入了这个头文件,所有的对象都自动获取了下标表示法的能力。但是并不是所有的对象都能正常运行下标表示法。一般情况下,容器类对象(如NSArray、NSDictionary等),可以正常运行。
以下代码可以正确执行。
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; dict[@"foo"] = @"bar";
不能正确执行。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSLog(@"the value of key is %@", userDefaults[@"key"]);
相关文章推荐
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作
- Objective-C如何使用对象集合学习系列之一
- Objective-C如何使用对象集合学习系列二
- Objective-C如何使用对象集合学习系列之一
- Objective-C如何使用对象集合之学习系列三
- WebService学习之如何使用实体对象作为参数
- 【PHP面向对象(OOP)编程入门教程】如何去使用对象中的成员
- 如何使用List.toArray()转换为数组对象
- Web设计中如何使用XML数据源对象(1)
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用请求对象)
- 关于Android开发中如何使用dp表示长宽
- 如何使用Name对象,包括WorkspaceNames和DatasetNames
- 说说如何使用 JavaScript 创建防篡改对象
- 如何使用 Forms 身份验证创建 GenericPrincipal 对象
- 如何使用JPA的nativeQuery将查询出的信息封装为对象
- Spring 如何将无法使用new操作符新建的对象作为spring的bean (使用FactoryBean接口)
- 如何使用xFire开发webService返回复杂对象List
- controller中使用@RequestBody,Java如何传递json对象访问接口,以及对象中的时间类型