La respuesta a su pregunta es que cualquiera que adelante e importar el archivo de cabecera typedef o de utilizar un tipo genérico como NSInteger en lugar del tipo de enumeración.
Sin embargo, hay más razones para no importar un archivo de encabezado que simplemente compilar la velocidad.
No importar un archivo de encabezado también reduce el acceso inadvertido a clases extrañas.
Por ejemplo, supongamos que tiene una clase TrackFileChanges que realiza un seguimiento del sistema de archivos para ver los cambios en un archivo específico, y tiene una clase CachedFile que almacena datos en caché de un archivo. Este último podría usar un ivar de tipo privado TrackFileChanges *, pero para los usos de CachedFile, esto es simplemente un detalle de implementación (idealmente, el ivar se generaría automáticamente con una propiedad privada usando el nuevo tiempo de ejecución, pero eso no es posible si tú ' re usando el tiempo de ejecución anterior).
Por lo tanto, los clientes que #import "CachedFile.h" probablemente no necesiten o no quieran tener acceso a TrackFileChanges.h. Y si lo hacen, deben dejarlo en claro al #importarlo ellos mismos. Al usar @class TrackFileChanges instea de #import "TrackFileChanges.h" en CachedFile.h, mejora la encapsulación.
Pero dicho todo esto, no hay nada malo en importar un archivo de cabecera desde un segundo archivo de cabecera si el segundo encabezado desea exponer el primero a todos los clientes. Por ejemplo, los archivos de encabezado que declaran clases deben importarse directamente en los archivos de cabecera de subclases, y los archivos de cabecera que declaran protocolos bien pueden importarse directamente (aunque usted puede usar @protocol ABC; para evitar esto).
Por toda respuesta reciente (Swift 3, 2017) buscar en mi respuesta. http://stackoverflow.com/a/42009056/342794 – lal