Question

I have this line in Objective-C.

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

What does the @{ ... } part do exactly? It is an object, but it seems to create some kind of key, value pair on the fly.

Was it helpful?

Solution

It is creating NSDictionary object as you said. Syntax is simple

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

In your example, keys are objects of NSString class. It is important to remember that dictionary copies keys and retains values.

OTHER TIPS

These are called Literals. Apple LLVM Compiler 4.0 and above can use this.

In your question, the expression creates a dictionary

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

Similarly arrays which were created using NSArray arrayWithArray and other similar methods, can now be done easily

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

and you will not even need the nil sentinel.

More details here: http://clang.llvm.org/docs/ObjectiveCLiterals.html

The @{ ... } syntax is a shorthand way of creating a NSDictionary introduced as part of Modern Objective-C. The syntax @{@"key1": object1, @"key2": object2} is just a shorthand for more verbose methods like [NSDictionary dictionaryWithObjectsAndKeys:] among a few others.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top