如何获取用于标识符的类名或没有名称空间的nibName?

时间:2016-01-06 23:36:53

标签: ios swift

在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

2 个答案:

答案 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)