swift - 如何获取结构的 bundle ?

标签 swift struct nsbundle

在 Swift 中,你可以调用

let bundle = NSBundle(forClass: self.dynamicType)

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

那么如何获取 Swift struct 的当前包?

最佳答案

最佳解决方案取决于您需要 bundle 的用途。

是否要查找仅存在于已知在您编写的代码运行时加载的特定应用程序、框架或扩展包中的资源?在这种情况下,您可能想使用 init(identifier:)而不是动态查找定义特定类型的包。

当心“遵循类型”包查找。例如,如果框架类 Foo 使用 NSBundle(forClass: self.dynamicType) 加载资源,则 Foo 的子类由加载该框架的应用程序最终将查找应用程序包而不是框架包。

如果您确实需要对结构(或枚举)进行“遵循类型”包查找,一种可能有用的解决方法是将类定义为子类型:

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

请注意,这里没有动态,因为不需要动态 — 每个 Foo 都来自相同的类型定义(因为结构无法继承),因此它的静态类型与其动态类型相匹配。

(不可否认,一个可以处理结构、枚举和协议(protocol)的 NSBundle(forType:) 可能会成为一个 nice feature request 。虽然我认为让它处理扩展和所有事情可能很棘手。 ..)

关于swift - 如何获取结构的 bundle ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316325/

相关文章:

ios - 生成特定尺寸的 View 图像?

c - 结构和静态结构有什么区别?

arrays - Google Cloud - BigQuery - 在结构中转置 2 个字符串列

ios - 如何在 ios 中将 .mp3 文件从 NSBundle 添加到 NSArray

ios - 使用 Swift 播放随机音频文件

ios - curl -d 到 Alamofire

objective-c - Swift 集成模式 MVC 和 Facade 模式

ios - 如何在iOS 11中正确添加状态栏模糊效果而不发出警告?

WebSocket 消息中的 JavaScript 双反斜杠

objective-c - OCMock 不 stub NSBundle 方法