swift - 如何在视图控制器之间共享集合而不来回传递它?
问题描述
在我的应用程序中,我有 3 个视图控制器,每个视图控制器都处理相同的元素集合。除了在执行 segues 时来回传递之外,还有其他方法可以共享该集合吗?我可以以某种方式让所有 3 人都可以访问收藏吗?什么是正确的方法?
解决方案
您可以制作一个包含元素集合的单例。然而,单例通常被认为是不好的,因为它们会导致比解决的问题更多的问题,因此使用 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
}
}
推荐阅读
- apache-spark - 使用不使用 UDF 的数字范围创建 Df 列
- sublimetext3 - 在 sublime3 中无法连接到 HERMES
- sql-server - 验证是否在查询中的任何地方都进行了特定的连接
- sql - 过去 12 个月的累计金额 - 缺少日期?
- javascript - OAuth 2.0 in Node js Access Token Error The content-type is not JSON compatible
- python - 从 CLI 运行时出现 Python“ModuleNotFound”错误,但在“pip install -e”之后从 Pycharm 运行时不会出现错误。”(使用 Anaconda)
- python - Python 日志记录:即使处理程序级别为 INFO,调试消息也会记录到 stderr
- sql - 在 Mysql Workbench 中保存和导出 EER 图布局
- python-3.x - python覆盖父母行为,同时保留父母方法和名称
- excel - 如何在不导入新文件的情况下异步发出请求