2016-04-07 6 views
1

人気のあるオープンソースの素早いプロジェクトで。私は、メインバンドルからファイルを読み込むために使用されたアプローチに気づいた。mainBundleからロード

@objc class TestClass: NSObject { } 

let bundle = NSBundle(forClass: TestClass.self) 
let path = bundle.pathForResource(filename, ofType: "json") 

このアプローチを使用することもできます。

let path = NSBundle.mainBundle().pathForResource(filename, ofType: "json") 

なぜ、誰かが最初のアプローチを選択するのはなぜですか?それは意志、

NSBundle.mainBundle() 

、あなたのアプリケーションコードからこのコードを実行した場合:

NSBundle(forClass: TestClass.self) 

これは、アプリケーションのメインバンドルを返しながら:

+1

プロジェクト(ライブラリやフレームワークなど)にバンドルが異なる場合、最初の方法を使用する場合は、明示的に外部バンドルから適切なコンテンツを読み込むことができます。 – holex

答えて

3

これはTestClassクラスを含むバンドルを返します。常にあなたのメインバンドルを返す。しかし、そのクラスが別のライブラリやフレームワークに含まれている場合、それを含むバンドルが返されます。

たとえば、CocoaPodのすべてのSwiftライブラリは、動的フレームワークを使用して統合され、メインバンドル内の別のバンドルにデプロイされます。したがって、すべてのフレームワークは埋め込みバンドルを使用してリソースにアクセスする必要があります。

コードの移植性を向上させるために、最初のアプローチ(メソッド)を使用することをお勧めします。また、動的フレームワークを作成するときに必要です。

関連する問題