【发布时间】:2012-07-23 03:23:37
【问题描述】:
就像:
"APP_INFO" : {
"v":"2.0",
"appid":"1",
"lang":"zh-Hans",
}
我不能使用 init 方法,因为它不是编译时常量。
【问题讨论】:
标签: objective-c nsdictionary literals
就像:
"APP_INFO" : {
"v":"2.0",
"appid":"1",
"lang":"zh-Hans",
}
我不能使用 init 方法,因为它不是编译时常量。
【问题讨论】:
标签: objective-c nsdictionary literals
从 Clang 3.2 开始,literal container syntax 可用:
NSDictionary * d = @{
@"APP_INFO" :
@{
@"v" : @"2.0",
@"appid" : @"1",
@"lang" : @"zh-Hans",
}};
这将创建一个普通的不可变NSDictionary 实例,就像您使用了alloc/initWithObjects:forKeys: 或任何其他方法一样;它只是很好的语法糖。
有传言称,Apple 也将很快将其添加到他们的编译器中。
【讨论】:
const?这只是一个指针:NSDictionary * const d = [NSDictionary dictionary];
NSDictionary?”,答案是“你不能。”。他实际上是在问“我如何将NSDictionary 表达为文字?”
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"2.0", @"v", @"1", @"appid", @"1", @"zh-Hans", @"lang", nil];
这将创建一个不可变的字典,其内容在编译时是固定的。
您可以使用相同的 init 方法在运行时填充新字典:
id object1 = ...;
...
NSString *key1 = ...;
...
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:object1, key1, object2, key2, object3, key3, nil];
【讨论】: