![](/img/trans.png)
[英]Passing Values to UIViewController in new Storyboard - Swift
[英]Use Swift nested class as UIViewController in storyboard
你们知道在Storyboard中是否可以使用Swift嵌套类作为UIViewController吗?
我正在研究构建项目的不同方法,其中一种是通过将相关类嵌套在同一主类中来对它们进行分组。
让我用一个例子来解释:
假设我有一个屏幕来显示我的应用程序设置,这需要一个UIViewController和一个模型。
我可以创建2个类: SettingsController
和SettingsModel
,但是我想知道是否通过将主类Settings
包含嵌套类Controller
和Model
这样的主类来进行结构化不是很好吗?
class Settings {
class Controller: UIViewController {
...
}
class Model {
...
}
}
这样,我可以通过执行Settings.Controller
和Settings.Model
来使用它们,我认为它们看起来非常不错。
现在,在使用情节提要时,效果很好。 在情节提要中,当我选择一个视图控制器来设置自定义类时,如果键入Setting.Controller
并按Enter,则该字段将无效并被清除。
所以我的问题是,你们是否知道我在做错什么,或者根本不可能吗?
当然,在发布问题后,我找到了解决方案,因此我将其分享给后代。
因此,我尝试执行此操作时遇到了一个问题:
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.