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

前端之家收集整理的这篇文章主要介绍了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.虽然我认为它可能很难处理扩展和一切…)

原文链接:https://www.f2er.com/swift/319743.html

猜你在找的Swift相关文章