2012-04-08 27 views
5

Rõ ràng, các mục tiêu C-literals mới đã hạ cánh xuống clang trunk, và do đó nâng tấm màn che bóng của bất kỳ NDA.Có thể sử dụng NSArray, NSDictionary và NSNumber "literals" trong Xcode 4.3 không? (LLVM 4.0)

Câu hỏi của tôi ... CÁCH I, trong tên của Thiên Chúa, có thể sử dụng các cấu trúc (xem dưới đây) trong Xcode ⋜ v4.3. Nếu không, và tôi đang chờ đợi chờ đợi cho XCode 4.4/OSX 10.8/LLVM 4.0 trifecta, có thể cùng một chức năng được jerry-rigged bằng cách nào đó - thông qua một số loại thông minh, vv?

(Đối với tất cả y'all mà không biết ... những cú pháp mới có nghĩa là sẽ có những nhiều đánh giá đúng additional constructs for creatingNSArray, NSDictionary, and NSNumber.)

+2

Hoàn toàn có khả năng là câu trả lời cho [Có cách nào để sử dụng LLVM 3 trong Xcode 4.1] hay không (http://stackoverflow.com/questions/7361824/is-there-any-way-to-use-llvm- 3-in-xcode-4-1) vẫn chủ yếu áp dụng. Tôi nghĩ rằng có những câu hỏi tương tự khác liên kết từ đó, quá. –

Trả lời

5

Tôi đã tìm ra cách không chính thức để thực hiện điều này ... Sử dụng Lumumba Framework on github, có một tập hợp toàn bộ các loại đường cú pháp có định nghĩa sau… đạt được hiệu quả mong muốn.

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

Vì vậy, về cơ bản, thay vì ...

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

Nó chỉ là ...

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

Ahhh, ngắn gọn.

2

Xin lỗi, đây là Xcode 4.4 chỉ.

+0

Nó phụ thuộc vào phiên bản IDE như thế nào? Xcode không có gì để làm với điều này. Nó phụ thuộc vào phiên bản trình biên dịch. –

+1

Đây không phải là một câu trả lời rất hữu ích; hỗ trợ cho cú pháp đến từ trình biên dịch, mà _is_ có sẵn. Câu hỏi về bản chất là cách trình biên dịch khác với trình biên dịch mặc định có thể được sử dụng trong Xcode. –

+1

Cách câu hỏi được hỏi, tôi cho rằng XCode không được xem là IDE, mà là ứng dụng bạn tải xuống. Trong ứng dụng, có đến llvm 3.0 (xem Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang) – niklassaers

Các vấn đề liên quan