Swift has made a big use of generics through the standard library. Arrays, dictionaries, enums, and more leverage generic types in order to ensure contained types are not swallowed by the language. In order to improve compatibility and interoperability, Apple has introduced lightweight generics to Objective-C.
Lightweight generics in Objective-C
Using typed NSArray* in Objective-C
In Objective-C, for example, arrays can hold any object type:
NSArray * array = @[@"Hello", @1, @{@"key": @2} [NSObject new], [NSNull null]];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// Do something with the object
}];
In the previous code, we see id _Nonnull obj as being...