3

我在 Objective-C 中有这条线。

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

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

4

3 回答 3

6

正如你所说,它正在创建 NSDictionary 对象。语法很简单

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

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

于 2014-03-19T15:44:16.887 回答
3

这些被称为字面量。Apple LLVM Compiler 4.0 及更高版本可以使用它。

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

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

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

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

你甚至不需要nil哨兵。

更多细节在这里:http ://clang.llvm.org/docs/ObjectiveCLiterals.html

于 2014-03-19T15:54:53.830 回答
1

@{ ... } 语法是创建作为现代 Objective-C 的一部分引入的 NSDictionary 的简写方式。语法@{@"key1": object1, @"key2": object2}只是更详细方法的简写,例如[NSDictionary dictionaryWithObjectsAndKeys:]其他一些方法。

于 2014-03-19T15:50:18.330 回答