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

jwo*_*oww 4 objective-c ios

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

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

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

  1. 程序中迷路'@'
  2. 在':'标记之前预期'}'

我在这里错过了什么?另外,在哪里可以找到有关NSDictionary对象的此快捷方式声明的文档?像这样的谷歌语法非常难.

iSo*_*Tom 5

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


Rav*_*avi 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];
Run Code Online (Sandbox Code Playgroud)