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/

相关文章:

c - 库的头文件中的结构定义和编译差异

struct - 在 View Controller 之间快速传递结构?

objective-c - 在包 NSBundle 中找不到名为 'Main' 的 Storyboard

ios - 无法使用 Xcode - ios 从代码访问文件

swift - 我如何使用 SnapKit 在 ScrollView 中居中按钮数组

ios - 实例成员 '' 不能用于类型 '' prepareForSegue

ios - Collection View 不使用自定义对象显示单元格

c - 使用 malloc 和不使用 malloc 创建结构体的区别

objective-c - loadNibNamed :owner:topLevelObjects: is called 时插件崩溃

ios - 具有自定义 Metal 内核的核心图像过滤器不起作用