2012-04-08 9 views
5

Offenbar sind die neuen Objective-C-Literale in die clang trunk gelandet und haben damit den Schattenschleier aller NDAs gelüftet.Ist es möglich, NSArray, NSDictionary und NSNumber "Literale" in Xcode 4.3 zu verwenden? (LLVM 4.0)

Meine Frage ... Wie kann ich, im Namen Gottes, diese Konstrukte verwenden (siehe unten) in Xcode ⋜ v4.3. Wenn nicht, und ich bleibe auf die XCode 4.4/OSX 10.8/LLVM 4.0 Trifecta warten, könnte die gleiche Funktionalität irgendwie jerry-manipuliert werden - über einige clevere Kategorien usw.?

(für alle y'all, die nicht wissen ... diese neuen Syntaxen bedeuten, dass es die sehr geschätzte additional constructs for creatingNSArray, NSDictionary, and NSNumber sein.)

+2

Es ist sehr wahrscheinlich, dass die Antwort auf [Gibt es eine Möglichkeit, LLVM 3 in Xcode 4.1 zu verwenden] (http://stackoverflow.com/questions/7361824/is-there-any-way-to-use-llvm- 3-in-xcode-4-1) gilt noch weitgehend. Ich denke, von da an gibt es noch andere ähnliche Fragen. –

Antwort

5

Ich fand einen nicht-offiziellen Weg, dies zu tun ... Mit der Lumumba Framework on github gibt es eine ganze Kit'n'Caboodle von Syntactic Zucker Kategorien, die die folgenden definiert hatte ..., die den gewünschten Effekt erzielen.

#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])]; } 

Also, im Grunde statt ...

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

Es ist nur ...

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

Ahhh, Kürze.

2

Leider ist der Xcode 4.4 nur.

+0

Wie würde es von der Version der IDE abhängen? Xcode hat damit nichts zu tun. Das hängt von der Compiler-Version ab. –

+1

Dies ist keine sehr nützliche Antwort; Unterstützung für die Syntax kommt vom Compiler, der _is_ verfügbar ist. Die Frage ist im Wesentlichen, wie ein anderer Compiler als der Standard in Xcode verwendet werden kann. –

+1

Wie die Frage gestellt wurde, nehme ich an, dass XCode nicht als die IDE, sondern die Anwendung, die Sie herunterladen, gesehen wird. In der Anwendung kommt llvm 3.0 (siehe Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang) – niklassaers

Verwandte Themen