Odpowiedź na to pytanie jest iść do przodu i albo zaimportować plik nagłówka typedef lub używać typu rodzajowego jak NSInteger zamiast typu wyliczeniowego.
Istnieje jednak więcej powodów, dla których nie należy importować pliku nagłówkowego niż tylko prędkość kompilacji.
Brak importowania pliku nagłówkowego zmniejsza również nieumyślny dostęp do obcych klas.
Załóżmy na przykład, że masz klasę TrackFileChanges, która śledzi system plików w celu zmiany określonego pliku, i masz klasę CachedFile, która przechowuje buforowane dane z pliku. Ten ostatni może używać prywatnego ivar typu TrackFileChanges *, ale w przypadku użycia CachedFile jest to po prostu szczegół implementacji (najlepiej, że ivar byłby automatycznie generowany z prywatną własnością przy użyciu nowego środowiska wykonawczego, ale to nie jest możliwe, jeśli " ponownie używać starego czasu pracy).
Tak więc klienci, którzy #import "CachedFile.h" prawdopodobnie nie potrzebują lub nie chcą dostępu do TrackFileChanges.h. A jeśli tak, to powinni to wyjaśnić, # implikując to samemu. Używając @class TrackFileChanges instea z #import "TrackFileChanges.h" w CachedFile.h poprawisz enkapsulację.
Ale wszystko, co powiedzieliśmy, nie ma nic złego w importowaniu pliku nagłówkowego z drugiego pliku nagłówkowego, jeśli drugi nagłówek chce wystawić pierwszego do wszystkich klientów. Na przykład pliki nagłówkowe, które deklarują klasy, muszą być importowane bezpośrednio w podklasach plików nagłówkowych, a pliki nagłówkowe deklarujące protokoły mogą być importowane bezpośrednio (chociaż możesz użyć @ protocool ABC; aby tego uniknąć).
Na ostatniej odpowiedzi (Swift 3, 2017) wyglądać w mojej odpowiedzi. http://stackoverflow.com/a/42009056/342794 – lal