微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.虽然我认为它可能很难处理扩展和一切…)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐