在一些流行的开源 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")
为什么有人会选择第一种方法而不是第二种?
这将返回包含以下内容的包TestClass
class:
NSBundle(forClass: TestClass.self)
虽然这会返回应用程序的主包:
NSBundle.mainBundle()
如果您从应用程序代码中执行此代码,它将始终返回您的主包。但如果该类包含在不同的库或框架中,它将返回包含它的包。
例如,CocoaPods 中的所有 Swift 库都是使用动态框架集成的,并且它们部署在主包内的不同包中。因此所有框架都必须使用嵌入式捆绑包来访问其资源。
我建议使用第一种方法(NSBundle(forClass:)
方法)以提高代码的可移植性。创建动态框架时需要它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)