在故事板上使用Swift嵌套类作为UIViewController

时间:2019-07-12 14:16:23

标签: ios swift cocoa-touch storyboard

你们知道在Storyboard中是否可以使用Swift嵌套类作为UIViewController吗?

我正在研究构建项目的不同方法,其中一种是通过将相关类嵌套在同一主类中来对它们进行分组。

让我举例说明:

说我有一个屏幕来显示我的应用程序设置,需要一个UIViewController和一个模型。
我可以创建2个类:SettingsControllerSettingsModel,但我想知道是否通过将主类Settings包含嵌套类{{ 1}}和Controller

Model

这样,我可以通过做class Settings { class Controller: UIViewController { ... } class Model { ... } } Settings.Controller来使用它们,我认为它们看起来不错。

现在,在使用情节提要时,此效果很好。在情节提要中,当我选择一个视图控制器来设置自定义类时,如果我键入Settings.Model并按Enter,则该字段将无效并被清除。

所以我的问题是,你们是否知道我在做错什么,或者根本不可能吗?

2 个答案:

答案 0 :(得分:2)

当然,是在发布问题之后,我才找到了解决方案,所以我将其分享给后代。

所以我尝试执行此操作时遇到了一个问题:

  1. 嵌套类是使用点的引用 表示法:turtle-bounds,但Interface Builder则不 看到它是一个有效的类名

解决方案很简单,为控制器指定自己的Objc名称:

Settings.Controller

通过执行此操作,可以为嵌套控制器赋予ObjC名称,从而将其公开给Interface Builder。现在,您可以通过填写class Settings { @objc(SettingsController) class Controller: UIViewController { } ... } 来引用控制器。

答案 1 :(得分:0)

我认为故事板不支持(但),因此与此同时,您需要使用一些解决方法。

如果您只需要语法Settings.Controller,则可以执行以下操作:(受this answer启发)

不是将您的Settings.Controller类声明为嵌套类,而是将其声明为独立类SettingsController

class SettingsController : UIViewController { ... }

然后在Settings中添加一个typealias

class Settings {
    typelias Controller = SettingsController
    class Model { ... }
}

现在您可以在情节提要中使用SettingsController,但在代码中使用Settings.Controller