在故事板中使用 Swift 嵌套 class 作为 UIViewController
Use Swift nested class as UIViewController in storyboard
你们知道是否可以在 Storyboard 中使用 Swift 嵌套 class 作为 UIViewController 吗?
我正在研究不同的方式来构建我的项目,其中之一是通过将相关的 classes 嵌套在相同的主要 class.
中来对它们进行分组。
让我用一个例子来解释:
假设我有一个用于显示我的应用程序设置的屏幕,它需要一个 UIViewController 和一个模型。
我可以创建 2 个 classes:SettingsController
和 SettingsModel
,但我想知道通过拥有一个 main class Settings
包含嵌套的 classes Controller
和 Model
像这样
class Settings {
class Controller: UIViewController {
...
}
class Model {
...
}
}
这样我就可以通过 Settings.Controller
和 Settings.Model
来使用它们,我认为这看起来很不错。
现在这在使用情节提要时效果很好。在情节提要中,当我 select 视图控制器设置自定义 class 时,如果我输入 Setting.Controller
并按回车键,该字段不会验证并被清除。
所以我的问题是你们知道我做错了什么或者这根本不可能吗?
我认为情节提要板(目前)还不支持,所以在此期间您需要使用一些变通方法。
如果您只需要语法 Settings.Controller
,您可以这样做:(受 this answer 启发)
声明您的 Settings.Controller
class 不是嵌套的 class,而是独立的 class SettingsController
:
class SettingsController : UIViewController { ... }
然后在Settings
中添加一个typealias
:
class Settings {
typelias Controller = SettingsController
class Model { ... }
}
现在您可以在故事板中使用 SettingsController
,但在代码中可以使用 Settings.Controller
。
当然,是在发布问题之后我找到了解决方案,所以我将其分享给后代。
所以我尝试这样做的方式有 1 个问题:
- 嵌套classes是使用点的引用
表示法:
Settings.Controller
但 Interface Builder 没有
将其视为有效的 class 名称
解决方案很简单,给控制器一个它自己的 Objc 名称:
class Settings {
@objc(SettingsController)
class Controller: UIViewController {
}
...
}
通过这样做,您可以为嵌套控制器指定一个 ObjC 名称,从而将其暴露给 Interface Builder。现在您可以通过填写 SettingsController
.
来引用控制器
你们知道是否可以在 Storyboard 中使用 Swift 嵌套 class 作为 UIViewController 吗?
我正在研究不同的方式来构建我的项目,其中之一是通过将相关的 classes 嵌套在相同的主要 class.
中来对它们进行分组。让我用一个例子来解释:
假设我有一个用于显示我的应用程序设置的屏幕,它需要一个 UIViewController 和一个模型。
我可以创建 2 个 classes:SettingsController
和 SettingsModel
,但我想知道通过拥有一个 main class Settings
包含嵌套的 classes Controller
和 Model
像这样
class Settings {
class Controller: UIViewController {
...
}
class Model {
...
}
}
这样我就可以通过 Settings.Controller
和 Settings.Model
来使用它们,我认为这看起来很不错。
现在这在使用情节提要时效果很好。在情节提要中,当我 select 视图控制器设置自定义 class 时,如果我输入 Setting.Controller
并按回车键,该字段不会验证并被清除。
所以我的问题是你们知道我做错了什么或者这根本不可能吗?
我认为情节提要板(目前)还不支持,所以在此期间您需要使用一些变通方法。
如果您只需要语法 Settings.Controller
,您可以这样做:(受 this answer 启发)
声明您的 Settings.Controller
class 不是嵌套的 class,而是独立的 class SettingsController
:
class SettingsController : UIViewController { ... }
然后在Settings
中添加一个typealias
:
class Settings {
typelias Controller = SettingsController
class Model { ... }
}
现在您可以在故事板中使用 SettingsController
,但在代码中可以使用 Settings.Controller
。
当然,是在发布问题之后我找到了解决方案,所以我将其分享给后代。
所以我尝试这样做的方式有 1 个问题:
- 嵌套classes是使用点的引用
表示法:
Settings.Controller
但 Interface Builder 没有 将其视为有效的 class 名称
解决方案很简单,给控制器一个它自己的 Objc 名称:
class Settings {
@objc(SettingsController)
class Controller: UIViewController {
}
...
}
通过这样做,您可以为嵌套控制器指定一个 ObjC 名称,从而将其暴露给 Interface Builder。现在您可以通过填写 SettingsController
.