間接有效載荷
通常,列舉不能遞迴(因為它們需要無限儲存):
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>)
}