如何在不使用Singletons的情况下在多个View Controller之间传递数据?

时间:2017-10-23 05:14:12

标签: ios swift uiviewcontroller singleton uikit

假设我有一个Car对象,其中包含颜色,型号,品牌和座位数等标准属性。

我的应用程序中的每个视图控制器都负责获取每个属性直到结束:

彩色视图控制器 - >模型视图控制器 - >品牌视图控制器 - >座椅控制器 - >结果控制器

我现在在每个控制器之间传递数据的方式是通过Singleton,但我在网上看到的是反模式并且稍后会产生很多耦合。那么问题是:我将所有数据汇集到Result Controller的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

尝试将您的单身人士修改为服务。 例如:您的单身StateManager有两种方法:set(state: SomeState)getState() -> State

首先,使用协议:

protocol StateManager: class {
    func set(state: SomeState)
    func getStatus() -> SomeState
}

其次,你的app模块不应该知道他们使用的女巫StateManager

class MyAppController: UIViewController {
    var stateManager: StateManager?

    ...
}

当你启动VC时:

let vc = MyAppController()
vc.stateManager = ConcreteStateManager.sharedInstance
//present vc

如果您有创建VC的集中位置,则可以在其中保留ConcreteStateManager的实例,而无需调用sharedInstance

另外,请阅读swift中的依赖注入