gpt4 book ai didi

swift - 2个类之间的循环引用

转载 作者:行者123 更新时间:2023-11-30 12:17:12 36 4
gpt4 key购买 nike

我在尝试解决此循环引用时遇到问题。

首先我有两个 NSManagedObject ACoreDataBCoreData我想将模型从数据库层分离到 UI 模型。

因此,我创建了 AB 类,它们将出现在 UI 中。

我创建了一个协议(protocol) (Convertible),ACoreDataBCoreData 将实现该协议(protocol)以转换为 ui 对象。

到目前为止一切顺利,但现在我遇到了问题。每次我从 ACoreData 调用 Convert 时,它都会创建一个新的 A 并分配转换后的 BCoreData,然后分配 BCoreData 对象将再次为A 对象调用convert。我最终会得到一个互相调用 convert() 的循环。

这是代码:

protocol Convertible{
associatedtype T
func convert() -> T
}

class ACoreData: Convertible{
var b: BCoreData?
func convert() -> A {
var a = A()
a.b = self.b?.convert()
return a
}
}


class BCoreData: Convertible{
var a: ACoreData?

func convert() -> B {
var b = B()
b.a = self.a?.convert()
return b
}
}

class A{
var b: B?
}

class B{
var a: A?
}

您知道如何解决此问题以避免此循环引用中的循环吗?

提前致谢。

最佳答案

我建议最好的解决方案是不要这样做。您为代码添加了很多复杂性,但没有真正的优势。权衡一下您所看到的让托管对象远离 UI 的好处,与需要始终与托管对象进行转换、从一个托管对象之间进行转换、每当其中一个发生更改时将值从一个对象复制到另一个对象的额外复杂性、保持重复的内存占用等额外​​复杂性周围的数据副本,可能还有其他我还没有想到的东西。 “干净”的架构会让你在可维护性和性能方面付出很大的代价。

如果您不希望 UI 了解托管对象,请定义您的托管对象采用的协议(protocol)。让 UI 使用“实现协议(protocol)的事物”而不是托管对象。让 UI 不知道数据存储的详细信息不需要重复的数据模型。

关于swift - 2个类之间的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45257775/

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