繁体   English   中英

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

[英]Use Swift nested class as UIViewController in storyboard

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

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

让我用一个例子来解释:

假设我有一个屏幕来显示我的应用程序设置,这需要一个UIViewController和一个模型。
我可以创建2个类: SettingsControllerSettingsModel ,但是我想知道是否通过将主类Settings包含嵌套类ControllerModel这样的主类来进行结构化不是很好吗?

class Settings {
   class Controller: UIViewController {
      ...
   }
   class Model {
      ...
   }
}

这样,我可以通过执行Settings.ControllerSettings.Model来使用它们,我认为它们看起来非常不错。

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

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

当然,在发布问题后,我找到了解决方案,因此我将其分享给后代。

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

  1. 嵌套类是通过使用点符号表示的: Settings.Controller但是Interface Builder不会将其视为有效的类名。

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

class Settings {
   @objc(SettingsController)
   class Controller: UIViewController {
   }
   ...
}

通过这样做,您可以为嵌套控制器指定一个ObjC名称,从而将其公开给Interface Builder。 现在,您可以通过填写SettingsController来引用控制器。

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

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

声明您的Settings.Controller类不是一个嵌套类,而是一个独立的类SettingsController

class SettingsController : UIViewController { ... }

然后在Settings中添加typealias

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

现在你可以使用SettingsController在故事板,但Settings.Controller代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM