获得徽章 0
- 南峰子_老驴: #iOS知识小集#「 Indirect enums 」
Indirect enum 是需要以某种方式引用自身的枚举,被称为“indirect”是因为它们修改了 Swift 存储它们的方式,因此它们可以增长到任意大小。 如果没有间接引用,那么任何引用自身的枚举都可能变得无限大小:它可能会一次又一次地包含自身,但不应该是这样的。
例如,这是一个定义链表中节点的 indirect enum:
indirect enum LinkedListItem<T> {
case endPoint(value: T)
case linkNode(value: T, next: LinkedListItem)
}
因为它引用自身(其中一个关联值本身就是一个链表项),所以我们需要将枚举标记为 indirect。
除了在内部存储其值的特殊方式之外,indirect enum 与常规枚举的工作方式相同。 因此,我们可以使用该枚举创建一个链表并循环处理它,如下所示:
let third = LinkedListItem.endPoint(value: "Third")
let second = LinkedListItem.linkNode(value: "Second", next: third)
let first = LinkedListItem.linkNode(value: "First", next: second)
var currentNode = first
listLoop: while true {
switch currentNode {
case .endPoint(let value):
print(value)
break listLoop
case .linkNode(let value, let next):
print(value)
currentNode = next
}
}展开评论点赞