Why can\'t structs have recursive value types in Swift? Is this a temporary limit of the language or is it as intended?
I feel that the ability to declare a binary tree
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)
}
Check out this great blog post A persistent tree using indirect enums in Swift
The answer is in your 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.