使用NSDictionary定义在程序中使用Stray @

时间:2012-10-10 14:33:33

标签: objective-c ios

在关注在线方法的过程中,我遇到了以下代码:

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

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

  1. 程序中的Stray'@'
  2. 预期'}'之前':'令牌
  3. 我在这里缺少什么?另外,在哪里可以找到有关NSDictionary对象的此快捷方式声明的文档?像这样的Google语法非常难。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

这是Obj-C Literals的一部分,自LLVM 4.0开始引入。确保您使用的是正确版本的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];

答案 2 :(得分:3)

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

Objective-C Literals