swift – 如何获取bundle的结构体?

在斯威夫特,你可以打电话
let bundle = NSBundle(forClass: self.dynamicType)

在任何类中并获得当前捆绑.如果NSBundle.mainBundle(),例如运行单元测试,将无法获取正确的包.

那么如何才能获得Swift结构的当前捆绑?

这里最好的解决方案取决于您需要的捆绑包.

是要查找仅在特定的应用程序,框架或扩展包中存在的资源,当您正在编写代码时,它们已知会加载?在这种情况下,您可能需要使用init(identifier:),而不是动态查找定义某种类型的软件包.

谨防“类型”捆绑查询.例如,如果框架类Foo使用NSBundle(forClass:self.dynamicType)加载资源,则由加载该框架的应用程序定义的Foo子类将最终在应用程序包中查找,而不是框架包.

如果您需要对结构(或枚举)执行“跟随类型”捆绑查询,那么可能有帮助的一种解决方法是将类定义为子类型:

struct Foo {
     class Bar {}
     static var fooBundle: NSBundle { return NSBundle(forClass: Foo.Bar.self) }
}

注意在这里没有任何动态,因为没有什么需要 – 每个Foo来自相同的类型定义(因为结构不能继承),所以它的静态类型匹配其动态类型.

(诚​​然,可以处理结构体,枚举和协议的NSBundle(forType :)可能会成为一个nice feature request.虽然我认为它可能很难处理扩展和一切…)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...