5

显然,新的 Objective-C 文字已经进入了clang trunk,从而揭开了任何 NDA 的阴暗面纱。

我的问题......我怎么能,以上帝的名义,在 Xcode ⋜ v4.3 中使用这些构造(见下文)。如果没有,并且我一直在等待 XCode 4.4 / OSX 10.8 / LLVM 4.0 三重奏,那么相同的功能是否可以通过一些巧妙的类别等方式被随意操纵?

(对于所有不知道的人……这些新语法意味着将有非常受欢迎的额外构造来创建 NSArray, NSDictionary, and NSNumber。)

4

2 回答 2

5

我找到了一种非官方的方法来做到这一点……使用github 上的 Lumumba 框架,有一整套语法糖类别的工具包,具有以下定义……可以达到预期的效果。

#define $(...)        ((NSString *)[NSString  stringWithFormat:__VA_ARGS__,nil])
#define $array(...)   ((NSArray *)[NSArray arrayWithObjects:__VA_ARGS__,nil])
#define $set(...)     ((NSSet *)[NSSet setWithObjects:__VA_ARGS__,nil])
#define $map(...)     ((NSDictionary *)[NSDictionary dictionaryWithObjectsAndKeys:__VA_ARGS__,nil])
#define $int(A)       [NSNumber numberWithInt:(A)]
#define $ints(...)    [NSArray arrayWithInts:__VA_ARGS__,NSNotFound]
#define $float(A)     [NSNumber numberWithFloat:(A)]
#define $doubles(...) [NSArray arrayWithDoubles:__VA_ARGS__,MAXFLOAT]
#define $words(...)   [[@#__VA_ARGS__ splitByComma] trimmedStrings]
#define $concat(A,...) { A = [A arrayByAddingObjectsFromArray:((NSArray *)[NSArray arrayWithObjects:__VA_ARGS__,nil])]; }

所以,基本上,而不是……</p>

NSArray *anArray = [NSArray arrayWithObjects:
    object, @"aWord", [NSNumber numberWithInt:7], nil];

只是……</p>

NSArray *anArray = $array(object, @"aWord", $int(7));

啊,简洁。

于 2012-04-15T02:55:21.253 回答
2

抱歉,这只是 Xcode 4.4。

于 2012-04-08T19:13:05.273 回答