あなたの質問への答えは先に行くとtypedefのヘッダファイルをインポートしたり、NSIntegerなどの一般的なタイプの代わりに、列挙型を使用するようにするかです。
しかし、ヘッダーファイルをインポートしない理由は、コンパイル速度だけではありません。
ヘッダーファイルをインポートしないと、無関係な外部クラスへのアクセスも減少します。
たとえば、特定のファイルへの変更をファイルシステムで追跡するTrackFileChangesクラスがあり、ファイルからキャッシュされたデータを格納するCachedFileクラスがあるとします。後者はTrackFileChanges *タイプのプライベートivarを使用するかもしれませんが、CachedFileを使用する場合、実装の詳細です(理想的には、新しいランタイムを使用するプライベートプロパティを持つivarが自動的に生成されますが、古いランタイムを使用して)。
#import "CachedFile.h"のクライアントは、おそらくTrackFileChanges.hを必要としないか、アクセスしたくないクライアントです。彼らがそうするならば、彼らは自分自身を#インポートすることでそれを明らかにするべきです。 @class TrackFileChanges insteaの#import "TrackFileChanges.h"をCachedFile.hで使用すると、カプセル化が改善されます。
しかし、2番目のヘッダーが最初のすべてのクライアントに公開されたい場合、2番目のヘッダーファイルからヘッダーファイルをインポートすることには何の意味もありません。たとえば、クラスを宣言するヘッダーファイルは、サブクラス化ヘッダーファイルに直接インポートする必要があり、プロトコルを宣言するヘッダーファイルを直接インポートすることもできます(ただし、これを避けるため、@protocol ABCを使用できます)。
(スウィフト3、2017)に見えます私の答えで。 http://stackoverflow.com/a/42009056/342794 – lal