Ever since Leopard came out, I’ve wanted to do something useful with
resolveInstanceMethod:. The opportunity has yet to present itself. However, I have done a couple of really silly things with it, which have until now languished in obscurity in the depths of paste.lisp.org. So here they are.
This allows you to use arbitrary accessors on dictionaries, or arbitrary properties if you declare them first (no definition necessary). Example:
@interface NSDictionary (MyProperties) @property (retain) NSString *fruit; @end ... NSMutableDictionary *myDict = [NSMutableDictionary dictionary]; dict.fruit = @"apple"; // -setFruit: method is generated dynamically.
This defines a new string concatenation operator,
:. Well, almost. It allows you to append any number of strings (or arbitrary object descriptions) to a string using the following syntax:
[@"string " : @"other string " : arbitraryObject : @" yet another string "]
Unfortunately, a header is required in this case to avoid unknown selector warnings.
As noted in each of the files, I don’t recommend actually using these. They’re exercises in understanding the mechanics of the language rather than actually useful utilities. In particular, if you use Easy Dictionary you’re in for a world of hurt when you try to use a property that
NSDictionary already has, like