Swift [NSBundle bundleForClass:[self class]]的等效项


131

什么等效于下一个代码:

[NSBundle bundleForClass:[self class]]

我需要从测试包(JSON数据)加载资源

Answers:


222

从未使用过,但我认为应该是这样的:

斯威夫特<= 2.x

NSBundle(forClass: self.dynamicType)

斯威夫特3.x

Bundle(for: type(of: self))

39
当前版本的Xcode中的自动完成功能似乎不了解您在说什么,但确实可以工作。
大卫·贝克

4
在2.1版中:NSBundle(forClass:self)
zwebie '16


1
该解决方案不适用于值类型。考虑使用init?(identifier: String)标识符作为目标的捆绑软件ID。值类型的另一种解决方案是在值类型内部声明一个空类。后一种解决方案的示例:Bundle(for: Foo.Bar.self)其中Foo-您的结构,Bar-一些内部类。
Vadim Bulavin

1
这在Swift 3.1中不起作用。type(of: self)将返回ClassName.Type并调用Bundle(for:)返回主束
阿迪





7

在UIView子类的静态方法中,所选答案对我不起作用,但是我发现了这一点:

Bundle(for: self.classForCoder)

当您想获得Bundle测试目标内的数据时,这也适用。


6

如果您正在上课,那么

Bundle(for: type(of: self))

有时您可以在结构中工作,那么您需要使用捆绑软件中的任何类

Bundle(for: AnyClassInTheBundle.self)

4

为类的dynamicType加载xib

    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "CellForAlert", bundle: bundle)
    let view =  nib.instantiateWithOwner(self, options: nil).first as! UIView
    view.frame = bounds
    view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    self.addSubview(view);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.