# Modern Objective-C

# Literals

Modern Objective C provides ways to reduce amount of code you need to initialize some common types. This new way is very similar to how NSString objects are initialized with constant strings.

# NSNumber

Old way:

NSNumber *number = [NSNumber numberWithInt:25];

Modern way:

NSNumber *number = @25;

Note: you can also store BOOL values in NSNumber objects using @YES, @NO or @(someBoolValue);

# NSArray

Old way:

NSArray *array = [[NSArray alloc] initWithObjects:@"One", @"Two", [NSNumber numberWithInt:3], @"Four", nil]; 

Modern way:

NSArray *array = @[@"One", @"Two", @3, @"Four"];

# NSDictionary

Old way:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: array, @"Object", [NSNumber numberWithFloat:1.5], @"Value", @"ObjectiveC", @"Language", nil];

Modern way:

NSDictionary *dictionary = @{@"Object": array, @"Value": @1.5, @"Language": @"ObjectiveC"};

# Container subscripting

In modern Objective C syntax you can get values from NSArray and NSDictionary containers using container subscripting.

Old way:

NSObject *object1 = [array objectAtIndex:1];
NSObject *object2 = [dictionary objectForKey:@"Value"];

Modern way:

NSObject *object1 = array[1];
NSObject *object2 = dictionary[@"Value"];

You can also insert objects into arrays and set objects for keys in dictionaries in a cleaner way:

Old way:

// replacing at specific index
[mutableArray replaceObjectAtIndex:1 withObject:@"NewValue"];
// adding a new value to the end
[mutableArray addObject:@"NewValue"];

[mutableDictionary setObject:@"NewValue" forKey:@"NewKey"];

Modern way:

mutableArray[1] = @"NewValue";
mutableArray[[mutableArray count]] = @"NewValue";

mutableDictionary[@"NewKey"] = @"NewValue";