4 ms·
Can't get rid of the issue completely, but at least we can have: #define MD(val, key, vals...) [NSMutableDictionary dictionaryWithObjectsAndKeys:val, key, ## v
by hboon 15y ago
Can't get rid of the issue completely, but at least we can have:
#define MD(val, key, vals...) [NSMutableDictionary dictionaryWithObjectsAndKeys:val, key, ## vals , nil]
then do:
NSMutableDictionary* dict = MD(@"value1", @"key1", @"value2", @"key2")
And so on. Courtesy of http://news.ycombinator.com/item?id=1789839 http://news.ycombinator.com/item?id=1789839.
- 5hoom 15y agoVery nice, thanks for that.
- stephth 15y agoThat ## vals syntax is new to me. What's the difference with the following? #define MD(...) [NSMutableDictionary dictionaryWithObjectsAndKeys:__VA_ARGS__, nil]
- hboon 15y agoBoth of them wouldn't work for MD() due to the trailing nil. But for MD(val, key, vals...), it'd give you a slightly better error, complaining about the number of arguments when you do MD(). Otherwise they are the same in this case. ## removes one non-whitespace character – often the comma – before the ## if vals or __VA_ARGS__ is empty. e.g #define MO_LogDebug(fmt, ...) NSLog((@"DEBUG " fmt), ##__VA_ARGS__) MO_LogDebug(@"This works as expected %d", resultCode); // Removes the comma automatically in here: // NSLog((@"DEBUG " @"This works too without args"), ); MO_LogDebug(@"This works too without args");