在objective-c中,我使用类名来从包中提取笔尖或从故事板中加载viewControllers,如下例所示:
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil].firstObject];
[storyboard instantiateViewControllerWithIdentifier:NSStringFromClass(MyCustomViewController.class)];
在swift中使用类名来用于标识符或没有名称空间的nibName的等效方法是什么?
我试过这个
mainBundle.loadNibNamed(NSStringFromClass(MyClass.classForCoder), owner: self, options: nil)
但返回带有命名空间的MyTarget.MyClass
。
答案 0 :(得分:1)
很难理解你遇到了什么问题,但问题似乎是你坚持通过Objective-C Cocoa方法,这确实看到Swift类的名称通过模块命名为命名空间。但这似乎不是一个问题:
我想,你可以用机械方式剥离命名空间(保证一切都包括第一个点)。
或者,您可以采用相反的方式,并为 .xib 文件或故事板标识符提供该类的完整命名空间名称。这也很好。
然而,似乎没有必要采用这两种方法。我翻译了你的第一个例子:
[[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 文件内的顶级视图,这似乎是你的'之后。
答案 1 :(得分:0)
在通话中使用NSStringFromClass(MyClass.self)
代替NSStringFromClass(MyClass.classForCoder)
。