符号和花括号的Objective-C,@ {...}是什么意思?

时间:2014-03-19 15:41:49

标签: objective-c nsdictionary objective-c-literals

我在Objective-C中有这一行。

NSMutableArray *mutableArray;
[mutableArray addObject:@{ @"Something" : aObject, @"Otherthing" : anotherObject }];

@{ ... }部分究竟做了什么?它是一个对象,但它似乎在动态创建某种键值对。

3 个答案:

答案 0 :(得分:4)

正如您所说的那样创建NSDictionary对象。语法很简单

NSDictionary* dictionary = @{key: object, key: object};

在您的示例中,键是NSString类的对象。重要的是要记住字典复制键并保留值。

答案 1 :(得分:2)

这些被称为文字。 Apple LLVM Compiler 4.0及以上版本可以使用它。

在您的问题中,表达式会创建一个字典

NSDictionary *settings = @{ AVEncoderAudioQualityKey : @(AVAudioQualityMax) };

类似地,使用NSArray arrayWithArray和其他类似方法创建的数组现在可以轻松完成

NSArray *array = @[ @"Hello", @"World"]; 

,您甚至不需要nil哨兵。

此处有更多详情:http://clang.llvm.org/docs/ObjectiveCLiterals.html

答案 2 :(得分:1)

@ {...}语法是创建作为Modern Objective-C的一部分引入的NSDictionary的简便方法。语法@{@"key1": object1, @"key2": object2}只是[NSDictionary dictionaryWithObjectsAndKeys:]等更详细的方法的简写。