gpt4 book ai didi

ios - Swift 是否有办法不仅观察对象的变化,还观察引用的变化?

转载 作者:行者123 更新时间:2023-11-28 05:38:22 26 4
gpt4 key购买 nike

我正在使用 NSCache 的子类为应用程序缓存。它运行良好,尽管我很难思考如何在必要时更新缓存中的项目并将这些更改传播到整个应用程序。假设有一个模型类 ArticleArticle 的一个实例被缓存,应用中的一些 View Controller 使用 KVO 观察这个实例的相关属性,所以当这个 Article 的属性发生任何变化时>,更改会自动传播。

但是假设对该 Article 发出了另一个请求,并且缓存的版本现在已经过时了。向网络发出请求并序列化更新的新实例,因此需要更新显示旧实例的缓存和 View Controller 。如何将此更改传播到 View Controller ?有没有一种方法不仅可以观察属性,还可以观察引用本身,以便在它发生变化时得到通知?换句话说,做类似 oldArticle = newArticle 的事情,让观察者观察 oldArticle 火?

我有一些关于如何处理它的想法,但没有一个是我特别喜欢的。我可以单独将新的 Article 的属性值转移到旧的,这样相关的观察者就会被解雇 - 糟糕。我可以使用一个对象代理,并在它引用的对象发生变化时在代理上设置一个观察者。我可以使用 NotificationCenter 或设置一些委托(delegate)或其他东西来通知 View Controller 更新。但是,是否有更简单的方法来执行上述操作?

最佳答案

观察整篇文章的一种方法是使缓存成为一个可变字典(也许你的已经是),其中键是文章必不可少的东西(如 id),值是文章。观察 View Controller 然后可以观察缓存的字典(其中关键路径是文章 ID)——观察整篇文章的更新——以及他们希望在文章本身上的任何特定值。

坚持使用 KVO,另一种方法是提供 article 和 updateWith:(或 copyFrom:) 方法,该方法采用另一个 article 参数,使用该参数的 props 更新自身。在这种情况下,VC 将继续监视同一个对象,并且它们现有的更新逻辑将起作用。

关于ios - Swift 是否有办法不仅观察对象的变化,还观察引用的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com