2012-05-03 36 views
5

Tôi có một cái gì đó như thế này trong tôi lớp Mục tiêu-CBất kỳ cách nào để thay thế một phần từ bằng bộ tiền xử lý?

@interface PREFIX_MyClass { 
... 
@end 

và tôi muốn sử dụng tiền xử lý để chuyển nó sang:

@interface AwesomeMyClass { 
... 
@end 

nên cái gì như

#define PREFIX_ Awesome 

không hoạt động vì nó là một phần của từ. Bất kỳ cách nào khác? Tôi biết tôi có thể sử dụng một cái gì đó như thế này:

#define PrefixClass(NAME) Awesome##NAME 

@interface PrefixClass(MyClass) 

nhưng tôi không thích điều này vì nó phá vỡ mã hoàn chỉnh và tài liệu tham khảo sau đây trong các công cụ dev (ví dụ: Xcode trong trường hợp này)

+2

Chỉ tò mò thôi, đây có phải là hack không gian tên không? Tôi đang cố gắng hiểu lý do đằng sau những gì bạn đang cố gắng làm, và tôi chỉ đơn giản là không thể nhìn thấy nó. – dasblinkenlight

+0

@dashblinkenlight vâng, đó là một điều không gian tên tự động. – pho0

+0

Tôi chắc chắn rằng tôi đã thấy một dự án mã nguồn mở thực hiện điều này, nhưng tôi không thể cho cuộc sống của tôi tìm thấy nó một lần nữa. – malhal

Trả lời

2

Đây không phải là rất thanh lịch, nhưng bạn có thể sử dụng bộ tiền xử lý để thay thế toàn bộ tên lớp thay vì chỉ một phần.

#define PREFIX_MyClass AwesomeMyClass 
@interface PREFIX_MyClass 

Tất nhiên, điều này sẽ trở thành vấn đề nếu bạn sử dụng tiền tố nhiều lần và thay đổi. Bạn có thể sửa lỗi này bằng cách sử dụng một lệnh gọi macro khác để thêm tiền tố, để chỉ một macro chứa tiền tố thực.

#define ADD_PREFIX(name) Awesome##name 
#define PREFIX_MyClass ADD_PREFIX(MyClass) 
@interface PREFIX_MyClass 

này vẫn đòi hỏi một vĩ mô cho tất cả mọi thứ bạn muốn tiền tố, nhưng mã hoàn thành sẽ nhận ra tên PREFIX_MyClass.

+0

Vâng, đây thực sự là cách tôi đang làm nó ngay bây giờ. Tôi đã hy vọng có được một cái gì đó mà không đòi hỏi một định nghĩa mới cho mỗi lớp. – pho0

+0

@ pho0 Sau đó, chỉ cần khai báo tất cả các lớp thông qua macro: '@interface ADD_PREFIX (MyClass)' –

+0

@ 0x69, vấn đề là tôi mất tham chiếu sau và mã hỗ trợ đầy đủ. Tôi có thể yêu cầu quá nhiều;) – pho0

0

Đây không phải chính xác những gì bạn đang yêu cầu, nhưng nó có thể là một lộ trình khác để đạt được mục tiêu của bạn. Xcode cho phép bạn xác định tiền tố lớp cho dự án của bạn. Chọn dự án của bạn trong file navigator, và trong file thanh tra (lần đầu tiên "tab" của thanh bên phải) bạn sẽ có điều này:

enter image description here

Bất cứ văn bản bạn đưa vào lĩnh vực "Class Tiền tố" sẽ là được thêm vào trước tên của bất kỳ lớp nào bạn tạo trong dự án đó.

+0

Jacques, vâng, chúng tôi đã xem xét điều này nhưng chúng tôi cần các tiền tố có thể thay đổi bằng cách chỉnh sửa các chất liệu tiền xử lý trước. – pho0

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