4

在在线遵循howto的过程中,我遇到了以下代码:

NSDictionary *address = @{
  (NSString *)kABPersonAddressStreetKey: _address.text,
  (NSString *)kABPersonAddressCityKey: _city.text,
  (NSString *)kABPersonAddressStateKey: _state.text,
  (NSString *)kABPersonAddressZIPKey: _zip.text
};

这不会在 XCode 4.5.1 中编译。我收到两个错误:

  1. 程序中的杂散“@”
  2. ':' 标记之前应为 '}'

我在这里想念什么?另外,我在哪里可以找到关于 NSDictionary 对象的快捷方式声明的文档?谷歌这样的语法非常困难。

4

3 回答 3

5

它是现代客观 c 的一部分,被称为客观 c litterals。这段代码应该运行良好,也许您正在使用旧编译器,请确保您使用的是最后一个编译器(当前为 LLVM 4.1)

于 2012-10-10T14:36:34.307 回答
5

这是自 LLVM 4.0 以来引入的Obj-C Literals的一部分。确保您也使用正确版本的 iOS。翻译成原始的 pre-llvm 4.0 语言,NSDictionary 分配看起来像这样:

NSDictionary *address = [[NSDictionary alloc] initWithObjectsAndKeys:
                        (NSString *)kABPersonAddressStreetKey, _address.text, 
                        (NSString *)kABPersonAddressCityKey, _city.text,  
                        (NSString *)kABPersonAddressStateKey, _state.text, 
                        (NSString *)kABPersonAddressZIPKey, _zip.text, 
                        nil];
于 2012-10-10T14:45:48.710 回答
3

@ 声明是一个 Objective-C 文字。链接到信息:

Objective-C 文字

于 2012-10-10T14:37:04.270 回答