Как я могу поделиться коллекцией между контроллерами представления, не передавая это назад и вперед? - PullRequest
0 голосов
/ 12 марта 2020

В моем приложении есть 3 контроллера представления, каждый из которых работает над одной и той же коллекцией элементов. Есть ли способ поделиться этой коллекцией, кроме как передавать ее вперед и назад при выполнении сегментов? Можно ли как-нибудь сделать коллекцию доступной всем 3? Что было бы правильным способом go об этом?

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Вы можете сделать синглтон, содержащий коллекцию элементов. Синглтоны, однако, часто считаются плохими, поскольку они могут вызвать больше проблем, чем решают, поэтому, возможно, использование 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
    }
}
0 голосов
/ 13 марта 2020

Вы можете использовать одноэлементные классы, как показано в примере ниже

class YourClassName {
    static let shared = YourClassName()
    var test : String = "String"
    private init(){}
}

, а затем вызывать переменные, используя

YourClassName.shared.test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...