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

Posted

技术标签:

【中文标题】如何在 Objective-c 中将 NSDictionary 表示为文字?【英文标题】:How do I express NSDictionary as a literal in Objective-c? 【发布时间】:2012-07-23 03:23:37 【问题描述】:

就像:

"APP_INFO" : 
            "v":"2.0",
            "appid":"1",
            "lang":"zh-Hans",
             

我不能使用 init 方法,因为它不是编译时常量。

【问题讨论】:

【参考方案1】:

从 Clang 3.2 开始,literal container syntax 可用:

NSDictionary * d = @
    @"APP_INFO" :  
    @
        @"v" : @"2.0",
        @"appid" : @"1",
        @"lang" : @"zh-Hans",
;

这将创建一个普通的不可变NSDictionary 实例,就像您使用了alloc/initWithObjects:forKeys: 或任何其他方法一样;它只是很好的语法糖。

有传言称,Apple 也将很快将其添加到他们的编译器中。

【讨论】:

不是谣言,它在您链接到的页面上明确指出:“Apple 编译器版本的用户可以从 Apple LLVM 编译器 4.0 开始使用这些功能”^^ 作为运行时初始化的语法糖,您仍然不能将其设为 const 或将其放入头文件中。只有 NSString 字面量可以做到这一点。 @richster,我明白了。头文件中只能将NSString设为const,thx @rickster:为什么不能是const?这只是一个指针:NSDictionary * const d = [NSDictionary dictionary]; @JoshCaswell。我认为这个问题需要稍微编辑一下,因为正如所写,他在问“我如何制作编译时常量NSDictionary?”,答案是“你不能。”。他实际上是在问“我如何将NSDictionary 表达为文字?”【参考方案2】:
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];

【讨论】:

以上是关于如何在 Objective-c 中将 NSDictionary 表示为文字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-C 中将 int 转换为字节?

如何在 Objective-C 中将值附加到数组

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

如何在 Objective-C 中将照片分享到 Facebook?

如何在Objective-C中将孩子分配给父母?

如何在objective-c中将约束添加到UImageView