`
nswish
  • 浏览: 104296 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何在Xcode4.4中使用Objective-C的对象下标表示法

阅读更多

    Xcode4.4引入了LLVM 4.0编译器,该编译器为Objective-C提供了一些增强特性,下标表示法就是其中之一。大大简化了容器变量的使用,同时又很好地增强了可读性。让我们看一看下面这段代码:

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"]);
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics