从mainBundle载入
在一些stream行的开源swift项目中。 我注意到以下方法用于从主包加载文件。
@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")
为什么有人会select第二种方法呢?
这将返回包含TestClass
类的包:
NSBundle(forClass: TestClass.self)
虽然这返回了应用程序的主要包:
NSBundle.mainBundle()
如果您从您的应用程序代码执行此代码,它将始终返回您的主包。 但是,如果该类包含在不同的库或框架中,它将返回包含它的包。
例如,CocoaPods中的所有Swift库都使用dynamic框架进行集成,并将它们部署在主包中的不同包中。 所以所有的框架都必须使用embedded式包来访问他们的资源。
我build议使用第一种方法( NSBundle(forClass:)
方法)来提高代码的可移植性。 而且在创builddynamic框架时是必需的。