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

标签 ios swift uiviewcontroller singleton uikit

假设我有一个 Car 对象,它具有颜色、型号、品牌和座位数等标准属性。

我的应用程序中的每个 View Controller 都将负责获取每个属性,直到结束:

颜色 View Controller --> Model View Controller --> 品牌 View Controller --> 座位 Controller --> 结果 Controller

我现在在每个 Controller 之间传递数据的方式是通过单例,但我在网上读到这是一种反模式,稍后会产生很多耦合。那么问题来了:将所有数据汇集到 Result Controller 的最佳方式是什么?

最佳答案

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

首先,使用协议(protocol):

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 中的依赖注入(inject)的内容。

关于ios - 如何在不使用单例的情况下在多个 View Controller 之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46882365/

相关文章:

objective-c - 在连续的内存块中分配objective-c对象

iOS 位置图标

ios - [PhoneGap] 仅在主窗口中防止弹跳

ios - 获取可选链的负数

ios - Apple 可以拒绝设置约束后显示此错误的应用程序吗?

iOS, "swipe to view next image"和 "tap to hide ui"是默认功能吗?

php - 通过 Amazon SNS 发送 JSON 格式的 iOS 推送通知

ios - 如何检查 Firebase 数据库中的唯一用户名(swift)

ios - 在不创建新实例的情况下切换 View Controller

ios - 无法传递 UIVewController 的实例 - iOS