Typed
Typed copied to clipboard
Brings type inference to Objective-C with almost no hacks.
Type inference in Objective-C
This project includes several macros and class categories that provide hints for compiler type inference. From simple let and var that are inspired by Swift, to foreach () {} construct that replaces for (in) {} loops.
Without type inference, the types are error-prone:
NSString *name = @"Martin";
NSMutableString *mutableName = [name mutableCopy];
NSArray<NSString *> *letters = @[@"A", @"B", @"C"];
NSMutableArray<NSString *> *mutableLetters = [letters mutableCopy];
for (NSString *letter in letters) {
//...
}
- Types of almost all variables are not checked by compiler.
- Methods
-mutableCopydiscard types, because they returnid. - Array literal doesn’t check for mixed types and doesn’t propagate element type.
- Loop
for (in) {}ignores element type of enumerated collection.
With type inference, this is still pure Objective-C:
let name = @"Martin";
var mutableName = [name mutableCopy];
let letters = NSArray(@"A", @"B", @"C");
var mutableLetters = [letters mutableCopy];
foreach (letter, letters) {
//...
}
- Types of all variables are inferred from context.
- Methods
-mutableCopyare redeclared with proper return type. - Macro
NSArray(…)doesn’t accept mixed types as arguments and returnsNSArraywith proper element type. - Macro
foreach () {}infers type of the variable from the enumerated collection.