Ios 如何获取用于标识符或无命名空间的nibName的类名?

Ios 如何获取用于标识符或无命名空间的nibName的类名?,ios,swift,Ios,Swift,在objective-c中,我使用类名从捆绑包中拉出NIB或从故事板加载ViewController,如下示例所示: [[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self.class)所有者:self选项:nil].firstObject] [情节提要实例化eviewController标识符:NSStringFromClass(MyCustomViewController.class)] 在swift中,获取要用于标识符或不带命名空

在objective-c中,我使用类名从捆绑包中拉出NIB或从故事板加载ViewController,如下示例所示:

[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self.class)所有者:self选项:nil].firstObject]

[情节提要实例化eviewController标识符:NSStringFromClass(MyCustomViewController.class)]

在swift中,获取要用于标识符或不带命名空间的nibName的类名的等效方法是什么

我试过这个

mainBundle.loadNibNamed(NSStringFromClass(MyClass.classForCoder),所有者:self,选项:nil)


但是返回带有名称空间的
MyTarget.MyClass

很难理解您遇到了什么问题,但问题似乎是您坚持通过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文件内部的顶级视图(可选包装),这似乎是您所追求的。

很难理解您遇到了什么问题,但问题似乎是您坚持通过Objective-C方法,它们确实将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文件内部的顶级视图(可选包装),这似乎是您所追求的。

在调用中使用
NSStringFromClass(MyClass.self)
而不是
NSStringFromClass(MyClass.classForCoder)

使用
NSStringFromClass(MyClass.self)
(MyClass.self)
而不是
NSStringFromClass(MyClass.classForCoder)
在你的电话中。

我可能不理解你的问题(因为缺乏这方面的经验),因此,如果这是离题的话,我很抱歉。但是关于你的最后一个问题:你知道实例后缀
.dynamicType
?例如,
foo.dynamicType
Foobar.Type
。你为什么要使用
classForCoder
?你想解决的真正问题是什么?@matt-更新了一个更简单的问题很清楚。不确定用什么来完成这个新问题。不知何故,我找到了classForCoder。我可能不理解你的问题(因为缺乏这方面的经验),因此,如果这是离题的话,我很抱歉。但是关于你的最后一个问题:你知道实例后缀
.dynamicType
?例如,
foo.dynamicType
Foobar.Type
。你为什么要使用
classForCoder
?你想解决的真正问题是什么?@matt-更新了一个更简单的问题很清楚。不知道用什么来完成这个新问题。不知怎么的,我找到了classForCoder。