Skip to content

Instantly share code, notes, and snippets.

@nicklockwood
Last active December 10, 2015 11:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicklockwood/4430920 to your computer and use it in GitHub Desktop.
Save nicklockwood/4430920 to your computer and use it in GitHub Desktop.
An evil idea for writing a metalanguage on top of Objective C where the syntax is actually pleasant. Nobody should ever, ever do this.
//Interface
@interface NSObject (Evil)
@property (readonly) BOOL (^equals)(id object);
@end
@interface NSArray (Evil)
@property (readonly) NSArray *(^append)(id object);
@end
//Implementation
@implementation NSObject (Evil)
- (BOOL (^)(id object))equals
{
id __weak weakSelf = self;
return ^(id object) {
return [weakSelf isEqualTo:object];
};
}
@end
@implementation NSArray(Evil)
- (NSArray *(^)(id object))append
{
NSArray *__weak weakSelf = self;
return ^(id object) {
return [weakSelf arrayByAddingObject:object];
};
}
@end
//Tests
- (void)testAppend
{
NSArray *input = @[@"foo"];
NSArray *output = @[@"foo", @"bar"];
NSAssert(input.append(@"bar").equals(output), @"Append didn't work");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment