2012-05-03 4 views
5

tengo algo como esto en mi clase Objective-C¿Alguna manera de reemplazar parte de la palabra con el preprocesador?

@interface PREFIX_MyClass { 
... 
@end 

y me gustaría usar el preprocesador para convertirlo en:

@interface AwesomeMyClass { 
... 
@end 

así que algo como

#define PREFIX_ Awesome 

no funciona porque es parte de una palabra. ¿Cualquier otra manera? Sé que puedo usar algo como esto:

#define PrefixClass(NAME) Awesome##NAME 

@interface PrefixClass(MyClass) 

pero no me gusta esto porque rompe código completo y referencia siguientes en herramientas dev (es decir: Xcode en este caso)

+2

Simplemente curioso, ¿se trata de un hack de espacio de nombres? Estoy tratando de entender la razón detrás de lo que estás tratando de hacer, y simplemente no puedo verlo. – dasblinkenlight

+0

@dashblinkenlight Sí, es una cuestión de espacio de nombres automatizado. – pho0

+0

Estoy seguro de que vi un proyecto de código abierto que hace esto, pero no puedo volver a encontrarlo. – malhal

Respuesta

2

Esto no es muy elegante, pero podrías usar el preprocesador para reemplazar el nombre completo de la clase en lugar de solo una parte.

#define PREFIX_MyClass AwesomeMyClass 
@interface PREFIX_MyClass 

Por supuesto, esto se convierte en un problema si usa el prefijo más de una vez y cambia. Puede solucionar este problema usando otra llamada a otra macro para agregar el prefijo, de modo que solo una macro contenga el prefijo real.

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

Esto todavía requiere una macro para todo lo que desee el prefijo, pero la finalización de código reconocerán el nombre PREFIX_MyClass.

+0

Sí, así es como lo estoy haciendo ahora. Esperaba obtener algo que no requiriera una nueva definición para cada clase. – pho0

+0

@ pho0 Entonces simplemente declare todas las clases a través de macro: '@interface ADD_PREFIX (MyClass)' –

+0

@ 0x69, el problema es que pierdo el seguimiento de referencia y el soporte completo de código. Puedo estar pidiendo demasiado;) – pho0

0

Esto no es exactamente lo que está pidiendo, pero puede ser otra ruta para lograr su objetivo. Xcode le permite definir un prefijo de clase para su proyecto. Seleccione el proyecto en el navegador de archivos, y en el archivo inspector (primera "pestaña" de la barra lateral derecha) tendrá la siguiente:

enter image description here

cualquier texto que usted pone en el campo "Clase de prefijo" será antepuesto a los nombres de cualquier clase que crees en ese proyecto.

+0

Jacques, sí, hemos considerado esto, pero necesitamos que los prefijos se puedan modificar editando materiales preprocesadores. – pho0

Cuestiones relacionadas