the enums in Swift support recursive types using the indirect keyword so you can do something like:
indirect enum Tree<T> {
    case node(left: Tree?, right: Tree?, element: T)
}
and the classes in Swift also support recursive types:
class TreeNode<E> {
  var leftNode:TreeNode<E>
  var rightNode:TreeNode<E>
  var element:E
}
It's feels like that the ability to declare a binary tree node as a struct with recursive types in it to be the most natural implementation:
struct TreeNode<E>{
  var leftNode:TreeNode<E>
  var rightNode:TreeNode<E>
  var element:E
}
But you just can't do it with structs:
Value type 'TreeNode<E>' cannot have a stored property that recursively contains it.
Why can't structs have recursive value types in Swift? Is this a temporary limit of the language or is it as intended?
The answer is in the question: structs are value types. If you include a substruct B into a struct A, it means, that one object of type A will have a size sizeof(all_other_fields_of_A) + sizeof(B). So, a value type can not be recursive: it would have infinite size.
 李二狗 — @Meniny
                李二狗 — @Meniny
             
            
             
            
             
                 
                