在一个流行的开源快速项目中。我注意到以下方法用于从主包加载文件。
@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")为什么有人会选择第一种方法而不是第二种方法?
发布于 2016-04-07 10:58:25
这将返回包含TestClass类的包:
NSBundle(forClass: TestClass.self)当它返回应用程序的主包时:
NSBundle.mainBundle()如果您从应用程序代码中执行此代码,它将始终返回您的主包。但是,如果该类包含在不同的库或框架中,它将返回包含该类的包。
例如,CocoaPods中的所有Swift库都是使用动态框架集成的,它们部署在主包内的不同包中。因此,所有框架都必须使用嵌入式包来访问它们的资源。
我建议使用第一种方法(NSBundle(forClass:)方法)来提高代码的可移植性。在创建动态框架时,这是必需的。
https://stackoverflow.com/questions/36474106
复制相似问题