如何在Objective-c中将NSDictionary表示为文字?

如何在Objective-c中将NSDictionary表示为文字?,objective-c,nsdictionary,literals,Objective C,Nsdictionary,Literals,就像: "APP_INFO" : { "v":"2.0", "appid":"1", "lang":"zh-Hans", } 我不能使用init方法,因为它不是编译时常量 NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"2.0", @"v", @"1", @"appid", @"1", @"zh-H

就像:

"APP_INFO" : {
            "v":"2.0",
            "appid":"1",
            "lang":"zh-Hans",
             }
我不能使用init方法,因为它不是编译时常量

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];

从Clang 3.2开始,有:

NSDictionary * d = @{
    @"APP_INFO" :  
    @{
        @"v" : @"2.0",
        @"appid" : @"1",
        @"lang" : @"zh-Hans",
}};
这将创建一个普通的不可变的
NSDictionary
实例,就像您使用了
alloc
/
initWithObjects:forKeys:
或任何其他方法一样;这是一种很好的糖


有传言说苹果也将很快将此添加到他们的编译器中。

这不是谣言,它在您链接到的页面上明确指出:“苹果编译器版本的用户可以使用这些功能,从Apple LLVM编译器4.0开始”^^^^作为运行时初始化的语法糖,您仍然不能将其设置为常量或放入头文件中,不过。只有NSString文本可以这样做。@richster,我明白了。头文件中只能将NSString设为常量,thx@rickster:为什么它不能是常量?它只是一个指针:
NSDictionary*const d=[NSDictionary]@JoshCaswell就在右边。我认为这个问题需要稍微修改一下,因为他在问“如何使编译时常数
NSDictionary
?”,答案是“你不能”。他实际上是在问“如何将
NSDictionary
表达为文字?”