【发布时间】:2019-12-11 21:22:01
【问题描述】:
我有一个“根”UIViewController,它本身实例化了另外两个 UIViewController。但是,我需要将一些东西传递给其中的每一个,这必须在初始化时完成。
但是
所有 3 个 UIViewController 都通过 Storyboard 实例化。
这可能吗?或者我应该看看其他一些设计模式来传递这些数据?
具体来说,我试图避免紧密耦合,但是“根”正在实例化的 2 个 UIViewController 彼此不了解,但在两者中,都要求他们知道一个变量。
我可以将此变量设为“根”上的静态变量,但这会强制耦合。
我可以制作一个全局“常量”快速文件并将变量放入其中,但这看起来很脏而且很笨拙。
理想情况下,我想在实例化时将此变量传递给这些 UIViewController 中的每一个,但由于它们都是从 Storyboard 加载的,所以我无法让它工作。
我看过关于类似事情的博客和堆栈帖子,例如
https://blog.scottlogic.com/2014/11/20/swift-initialisation.html
但我还没有看到一个决定性的方法。
我是不是走错了路?
显然下面的“示例”代码不起作用,但它可以向您展示我正在尝试做的事情,当然条件是所有这三个 UIViewController 都有一个条目Interface Builder 并使用 Storyboard 中的那些实例化...
class root : UIViewController
{
private let a: CGFloat = 1.0
private let b: CGFloat = 10.0
private let vc1: firstViewController
private let vc2: secondViewController
override init()
{
self.vc1 = firstViewController(a: a, b: b)
self.vc2 = secondViewController(a: a, b: b)
super.init
}
}
class firstViewController : UIViewController
{
private let a: CGFloat
private let b: CGFloat
init(a: CGFloat, b: CGFloat)
{
self.a = a
self.b = b
super.init(aDecoder: Decoder)
}
}
这也归结为如何“链接” UIViewController 实例化......我还没有找到关于它的博客或教程或解释。
感谢任何帮助/建议。
【问题讨论】:
-
你可以使用storyBoards来做到这一点,所以你可以从代码中创建viewController或者在prepareforSegue或者在展示之前传入,但是因为所有的var都是私有的,所以你不能
-
与手头的问题无关,但按照惯例,类名应始终以大写字母开头,例如
RootViewController和FirstViewController而不是root和firstViewController。
标签: ios swift uiviewcontroller arguments init