首页 > 解决方案 > 如何在视图控制器之间共享集合而不来回传递它?

问题描述

在我的应用程序中,我有 3 个视图控制器,每个视图控制器都处理相同的元素集合。除了在执行 segues 时来回传递之外,还有其他方法可以共享该集合吗?我可以以某种方式让所有 3 人都可以访问收藏吗?什么是正确的方法?

标签: swiftdesign-patterns

解决方案


您可以制作一个包含元素集合的单例。然而,单例通常被认为是不好的,因为它们会导致比解决的问题更多的问题,因此使用 Core Data 可能是一个更好的选择。

class Singleton {

    static let shared = Singleton()

    private init(){}

    private let internalQueue = DispatchQueue(label: "com.singletoninternal.queue",
                                              qos: .default,
                                              attributes: .concurrent)

    private var _elementCollection: Set<T>

    var elementCollection: String {
        get {
            return internalQueue.sync {
               _elementCollection
            }
        }
        set (newState) {
            internalQueue.async(flags: .barrier) {
                self._elementCollection = newState
            }
        }
    }

    func setup(collection: Set<T>) {
        _elementCollection = collection
    }
}

推荐阅读