快速相当于[NSBundle bundleForClass:[self class]]

Dan*_*nil 121 swift

什么是下一个代码的快速等价物:

[NSBundle bundleForClass:[self class]]
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*nio 204

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

斯威夫特<= 2.x

NSBundle(forClass: self.dynamicType)
Run Code Online (Sandbox Code Playgroud)

Swift 3.x

Bundle(for: type(of: self))
Run Code Online (Sandbox Code Playgroud)

  • 当前版本的Xcode中的自动完成功能就像它不知道你在说什么,但确实有效. (37认同)
  • 在2.1版中:NSBundle(forClass:self) (4认同)
  • Yanno.我只是喜欢这个地方!谢谢! (3认同)

Ale*_*kiy 34

斯威夫特3:

Bundle(for: type(of: self))
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案不适用于值类型.考虑使用`init?(identifier:String)`,其中identifier是你的目标的bundle ID.如果您不想对包ID进行硬编码,请使用`Bundle(for:Foo.Bar.self)`其中`Foo` - 您的结构,`Bar` - 一些内部类. (3认同)

Ole*_*nov 18

斯威夫特 5

Bundle(for: Self.self)
Run Code Online (Sandbox Code Playgroud)


Sak*_*boy 12

我个人喜欢:

let bun = NSBundle(forClass: self.classForCoder)
Run Code Online (Sandbox Code Playgroud)


Mar*_*sel 9

let bundle = NSBundle(forClass:object_getClass(self))
Run Code Online (Sandbox Code Playgroud)


Sie*_*ult 7

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

Bundle(for: self.classForCoder)
Run Code Online (Sandbox Code Playgroud)

当您想要获得Bundle测试目标时,这也适用.


Wil*_* Hu 5

如果您正在上课,

Bundle(for: type(of: self))
Run Code Online (Sandbox Code Playgroud)

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

Bundle(for: AnyClassInTheBundle.self)
Run Code Online (Sandbox Code Playgroud)