间接有效载荷
通常,枚举不能递归(因为它们需要无限存储):
enum Tree<T> {
case leaf(T)
case branch(Tree<T>, Tree<T>) // error: recursive enum 'Tree<T>' is not marked 'indirect'
}
所述 indirect
关键字使得枚举存储其有效载荷与间接层,而不是将其存储内联。你可以在单个案例中使用此关键字:
enum Tree<T> {
case leaf(T)
indirect case branch(Tree<T>, Tree<T>)
}
let tree = Tree.branch(.leaf(1), .branch(.leaf(2), .leaf(3)))
indirect
也适用于整个枚举,在必要时使任何情况间接:
indirect enum Tree<T> {
case leaf(T)
case branch(Tree<T>, Tree<T>)
}