是否有可能在Xcode 4.3 (LLVM 4.0)中使用NSArray、NSDictionary和NSNumber的“字面量”?

5

显然,新的Objective-C字面量已经进入了clang trunk,因此揭开了任何NDA的神秘面纱。

我的问题是...在Xcode⋜v4.3中,我该怎样使用这些结构(见下文)。如果不能,在等待XCode 4.4 / OSX 10.8 / LLVM 4.0三位一体时,是否可以通过某些巧妙的类别等方式实现相同的功能?

(对于所有不知道的人...这些新语法意味着将有更多受欢迎的创建NSArray、NSDictionary和NSNumber的附加结构。


2
很可能在Xcode 4.1中有没有办法使用LLVM 3的答案仍然大部分适用。我认为那里还链接了其他类似的问题。 - jscs
2个回答

5
我找到了一种非官方的方法来实现这个...使用Github上的Lumumba Framework,有一个完整的工具包,其中有以下定义的语法糖类别...可以实现所需的效果。
#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])]; }

所以,基本上,而不是...

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

这只是...

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

啊,简洁。


2

对不起,这仅支持Xcode 4.4。


它会受到IDE版本的影响吗?Xcode与此无关,它取决于编译器版本。 - user529758
1
这不是一个非常有用的答案;语法的支持来自编译器,而编译器是可用的。问题本质上是如何在Xcode中使用不同于默认编译器的编译器。 - jscs
1
从问题的提问方式来看,我认为XCode不是被视为IDE,而是你下载的应用程序。在该应用程序中,包含了llvm 3.0(请参见Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang)。 - niklassaers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接