swift - 层次结构模型的类或结构?

标签 swift

我了解 Swift 中类和结构的区别。现在我想知道要将什么用于层次结构模型。

定义一个类非常简单(在属性集上设置连接现在无关紧要)。

class XYClass {
    var title: String
    var subinstances: [XYClass]
    weak var superinstance: XYClass?
}

但它看起来像是非常好的结构模型。特别是如果我需要经常实例化很多这样的东西。但是我想知道我是否可以以某种方式安全地指向 superinstance 或者我需要在每次更改时将整个对象图存储到每个实例......我应该使用类还是结构,如果是结构,如何定义是吗?

最佳答案

你正在制作一个链表。如果您要尝试形成单一类型结构的链表,内存管理将不可行,并且编译器会阻止您继续前进。这不会编译:

struct XYClass {
    var title: String
    var subinstances: [XYClass]
    var superinstance: XYClass?
}

编译器发现了问题。您不能将结构的实例引用为该结构的属性。 (编译器称之为“递归值类型”。)

因此,对于您的情况,您必须使用类,因为只有这样您才能获得 引用并避免保留循环。只有对类的引用可以是(并且仅当引用类型为 Optional 时)。

这将编译,并为您的链表提供连贯的内存管理:

class XYClass {
    var title: String = ""
    var subinstances: [XYClass] = []
    weak var superinstance: XYClass?
}

关于swift - 层次结构模型的类或结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29305940/

相关文章:

ios - 本地化字符串比较

ios - 在没有任何 Storyboard引用的情况下在 Controller 之间传递数据

regex - 快速忽略转义的双引号字符

swift - 如何向底部安全区域的 ListView 添加背景颜色 SwiftUI iOS 14

ios - 如何修复自定义点注释因重叠而消失的问题?

ios - ObjC 对象上的公共(public) swift 函数是动态还是静态调度的?

ios - SWRevealViewController 推送到实际的导航 Controller

ios - 如何创建 cocoapod 库

ios - 放置 iAd 和 Admob 横幅引起问题

ios - UIView 动画链无法正常工作