Ios 如何在不使用单例的情况下在多个视图控制器之间传递数据?

Ios 如何在不使用单例的情况下在多个视图控制器之间传递数据?,ios,swift,uiviewcontroller,singleton,uikit,Ios,Swift,Uiviewcontroller,Singleton,Uikit,假设我有一个汽车对象,它具有颜色、型号、品牌和座椅数量等标准属性 我的应用程序中的每个视图控制器将负责获取这些属性中的每一个,直到结束: 颜色视图控制器-->模型视图控制器-->品牌视图控制器-->座椅控制器-->结果控制器 我现在在每个控制器之间传递数据的方式是通过一个单例,但我在网上读到过,这是一种反模式,以后会产生很多耦合。问题是:对于我来说,将所有数据导入结果控制器的最佳方式是什么?尝试将您的单例修改为服务。 例如:您的单例StateManager有两种方法:set(state:Some

假设我有一个
汽车
对象,它具有颜色、型号、品牌和座椅数量等标准属性

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

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


我现在在每个控制器之间传递数据的方式是通过一个单例,但我在网上读到过,这是一种反模式,以后会产生很多耦合。问题是:对于我来说,将所有数据导入结果控制器的最佳方式是什么?

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

首先,使用协议:

protocol StateManager: class {
    func set(state: SomeState)
    func getStatus() -> SomeState
}
其次,你的应用程序模块不应该知道他们使用的witch
StateManager

class MyAppController: UIViewController {
    var stateManager: StateManager?

    ...
}
当你初始化你的VC时:

let vc = MyAppController()
vc.stateManager = ConcreteStateManager.sharedInstance
//present vc
如果您有一个用于创建VC的集中位置,则可以在其中保存
ConcreteStateManager
的实例,而无需调用
sharedInstance


另外,请阅读swift中有关依赖注入的内容。

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

首先,使用协议:

protocol StateManager: class {
    func set(state: SomeState)
    func getStatus() -> SomeState
}
其次,你的应用程序模块不应该知道他们使用的witch
StateManager

class MyAppController: UIViewController {
    var stateManager: StateManager?

    ...
}
当你初始化你的VC时:

let vc = MyAppController()
vc.stateManager = ConcreteStateManager.sharedInstance
//present vc
如果您有一个用于创建VC的集中位置,则可以在其中保存
ConcreteStateManager
的实例,而无需调用
sharedInstance


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

使用
NSUserDefaults
来存储数据,它可以在所有类中访问。这和使用单例一样糟糕。。如果不是更糟的话。创建一个超类并将该超类继承给所有子类(此处:视图控制器-->模型视图控制器-->品牌视图控制器-->座椅控制器-->结果控制器)。您可以为数据对象创建一个模型类,并将数据保存在其中,然后通过在结果控制器中创建该类的实例来访问它。@7如果数据是瞬态的,那么最好使用一个简单的单例模型类。使用
NSUserDefaults
存储数据,它可以在所有类中访问。这和使用单例一样糟糕。。如果不是更糟的话。创建一个超类并将该超类继承给所有子类(此处:视图控制器-->模型视图控制器-->品牌视图控制器-->座椅控制器-->结果控制器)。您可以为数据对象创建一个模型类,并将数据保存在其中,然后通过在结果控制器中创建该类的实例来访问它。@7ball如果数据是瞬态的,那么最好使用一个简单的单例模型类。