ios - 如何获取用于标识符或没有 namespace 的 nibName 的类名?

标签 ios swift

在 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/

相关文章:

iOS: AVQueuePlayer/AVPlayerItem 'An AVPlayerItem can occupy only one position in a player' s queue at a time.'

ios - 在 iOS 键盘上方附加自定义警报 View

ios - 检查是否显示alertview

ios - '[CFString! ]' is not convertible to ' [字符串]'

ios - 以 OpenCV Mat 格式从相机捕获静止图像

ios - 在 swift 4 中使用摄像头进行实时面部跟踪

ios - Bolt-Swift : error handling

ios - 不删除导航后退按钮标题

android - React Native,检测屏幕恢复

ios - FBSDKAppInviteDialog,离开时重新启动应用程序