2012-04-08 10 views
5

Apparentemente, i nuovi letterali Objective-C sono sbarcati nello clang trunk, sollevando così il velo oscuro di qualsiasi NDA.È possibile utilizzare "letterali" NSArray, NSDictionary e NSNumber in Xcode 4.3? (LLVM 4.0)

La mia domanda ... COME I, in nome di Dio, possono utilizzare questi costrutti (vedi sotto) in Xcode ⋜ V4.3. In caso contrario, e sono bloccato in attesa del trifecta XCode 4.4/OSX 10.8/LLVM 4.0, la stessa funzionalità potrebbe essere jerry-rigged in qualche modo - tramite alcune categorie intelligenti, ecc.?

(Per tutti i y'all che non sanno ... queste nuove sintassi significano che ci sarà il tanto apprezzato additional constructs for creatingNSArray, NSDictionary, and NSNumber.)

+2

È molto probabile che la risposta a [C'è un modo per utilizzare LLVM 3 in Xcode 4.1] (http://stackoverflow.com/questions/7361824/is-there-any-way-to-use-llvm- 3-in-xcode-4-1) si applica ancora ampiamente. Penso che ci siano altre domande simili collegate da lì. –

risposta

5

Ho trovato un modo non ufficiale per farlo ... Usando lo Lumumba Framework on github, c'è un intero kit'n'caboodle di categorie di zucchero sintattico che ha le seguenti definizioni ... che ottengono l'effetto desiderato.

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

Quindi, in sostanza, al posto di ...

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

E 'solo ...

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

Ahhh, brevità.

2

spiacenti, questo è Xcode 4.4 solo.

+0

Come dipenderebbe dalla versione dell'IDE? Xcode non ha nulla a che fare con questo. Dipende dalla versione del compilatore. –

+1

Questa non è una risposta molto utile; il supporto per la sintassi viene dal compilatore, che è disponibile. La domanda è essenzialmente come un compilatore diverso da quello predefinito può essere usato in Xcode. –

+1

Nel modo in cui è stata posta la domanda, presumo che XCode non sia visto come IDE, ma l'applicazione scaricata. Nell'applicazione, arriva llvm 3.0 (vedi Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang) – niklassaers

Problemi correlati