To start off, I want to say that I'm aware there are many articles and questions within SO that refer to the indirect
keyword in Swift.
The most popular explanation for the usage of indirect
is to allow for recursive enums.
Rather than just knowing about what indirect
allows us to do, I would like to know how it allows us to use recursive enums.
Questions:
Is it because enums are value types and value types do not scale well if they are built in a recursive structure? Why?
Does indirect
modify the value type behaviour to behave more like a reference type?
The following two examples compile just fine. What is the difference?
indirect enum BinaryTree<T> {
case node(BinaryTree<T>, T, BinaryTree<T>)
case empty
}
enum BinaryTree<T> {
indirect case node(BinaryTree<T>, T, BinaryTree<T>)
case empty
}