实施模型独特 - Swift解决方案?

时间:2016-09-04 00:55:32

标签: swift object design-patterns

确保表示由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,我对这种语言的库更感兴趣。

0 个答案:

没有答案