确保表示由id标识的元素的模型不会被实例化两次的好方法是什么?在Swift中有一些好的库吗?即使我怀疑这是一个常见的问题,我也找不到任何东西。
我想要这样的事情发生:
let a = fetchElementWithId(123)
let b = fetchElementWithId(123)
// then a === b
我想做像
这样的事情class Weak<T: AnyObject> {
weak var value : T?
init(value: T) {
self.value = value
}
}
class Foo {
private static var cache = [String: Weak<Foo>]()
var id: String
var bar: String
static func initialize(id: String, bar: String) -> Foo {
if let weakExistingModel = Foo.cache[id], let existingModel = weakExistingModel.value {
existingModel.bar = bar
return existingModel
}
return Foo(id: id, bar: bar)
}
private init(id: String, bar: String) {
self.id = id
self.bar = bar
Foo.cache[id] = Weak(value: self)
}
deinit() {
Foo.removeValueForKey(id)
}
}
然后调用静态初始化程序而不是正常的初始化程序。但是,如果我开始获得代表同一文档的子类等,事情会变得混乱。
所以在我深入研究之前,我想知道聪明人之前做过什么!我想解决方案并不是特别快速相关(即使在swift中你不能覆盖静态函数,这可能是一个问题),但是因为我使用swift,我对这种语言的库更感兴趣。