在 objective-c 中,我使用类名从 bundle 中提取 nib 或从 Storyboard加载 viewController,如下例所示:
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil].firstObject];
[ Storyboard实例化ViewControllerWithIdentifier:NSStringFromClass(MyCustomViewController.class)];
在没有命名空间的情况下,swift 获取类名以用于标识符或 nibName 的等效方法是什么?
我试过了
mainBundle.loadNibNamed(NSStringFromClass(MyClass.classForCoder),所有者:self,选项:nil)
但返回带有命名空间的 MyTarget.MyClass
。
最佳答案
很难理解您遇到的问题,但问题似乎是您坚持通过 Objective-C Cocoa 方法,这些方法确实将 Swift 类的名称视为通过模块命名空间。但这似乎不是什么大问题:
我想,您可以机械地剥离 namespace (保证包含第一个点之前的所有内容)。
或者,您可以采用相反的方式,为 .xib 文件或 Storyboard标识符提供类的完整命名空间名称。这也很好用。
但是,这两种方法似乎都没有必要。我翻译了你的第一个例子:
[[NSBundle mainBundle] loadNibNamed:
NSStringFromClass(self.class) owner:self options:nil
].firstObject];
...直接,一个术语一个术语,变成这个:
let v = NSBundle.mainBundle().loadNibNamed(
String(self.dynamicType), owner:self, options:nil)
.first
...它完美地工作:v
最终成为(可选包装)同名 .xib 文件内部的顶级 View ,这似乎成为你所追求的。
关于ios - 如何获取用于标识符或没有 namespace 的 nibName 的类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644911/