Swift 包管理器:如何像在常规 Xcode 项目中一样加载 UIViewController + xib 对?

Joh*_*ing 6 xcode ios swift swift-package-manager

在常规的 iOS Xcode 项目中,当您创建 Cocoa touch 文件 ( MyVC.swift) 时,您还可以创建关联的 xib ( MyVC.xib)。调用super.init(nibName: nil, bundle: nil)视图控制器,然后插座就可以使用了。

在本例中,我尝试将项目中的代码移植到 Swift 包中,该包将在其他项目中重用。在 Swift 包中时,我找不到为视图控制器加载 xib 的方法。正确连接所有设备并致电 后super.init(nibName:bundle:),插座仍始终nil处于 的时间viewDidLoad

这在 Swift 包中可能吗?如果是这样,怎么办?如果没有,有什么替代方案吗?这感觉像是一个非常标准的用例。

Fwiw,我使用的是 swift-tools-version 5.3,我的平台是.iOS(.v13)


init我尝试过的各种s:

  • super.init(nibName: nil, bundle: nil)
  • super.init(nibName: nil, bundle: .main)
  • super.init(nibName: "\(Self.self)", bundle: .main)
  • super.init(nibName: nil, bundle: .init(for: Self.self))
  • super.init(nibName: "\(Self.self)", bundle: .init(for: Self.self))

Joh*_*ing 13

经过几个小时的研究无果后,我发现了以下Swift 论坛提案,这让我得到了答案:

super.init(nibName: nil, bundle: .module)

“模块”包就是我正在寻找的:它“返回与当前 Swift 模块关联的资源包”。

使用此后,我的 xibs/Storyboards 正确加载。