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

时间:2015-03-27 16:47:48

标签: swift

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您正在制作链接列表。如果您尝试形成单个类型的结构的链接列表,则内存管理将不可行,并且编译器会阻止您陷入困境。这不会编译:

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

编译器已发现问题。您不能将结构的实例称为该结构的属性。 (编译器将其称为"递归值类型"。)

因此,对于您的情况,您必须使用类,因为只有这样才能获得weak引用并避免保留周期。只有对类的引用可以是weak(并且仅当引用被键入为可选时)。

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

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