Dar*_*una 6 recursion struct swift
结构在Swift中不能具有递归值类型.所以后面的代码无法在Swift中编译
struct A {
let child: A
}
Run Code Online (Sandbox Code Playgroud)
值类型不能递归,因为它将具有无限大小.但我想知道为什么以下代码可以编译?
struct A {
let children: [A]
}
Run Code Online (Sandbox Code Playgroud)
我认为这是关于所需的空间。
创建这种类型的值
struct A {
let child: A
}
Run Code Online (Sandbox Code Playgroud)
我们需要
所以我们需要无限空间。
另一方面创造这个价值
struct A {
let children: [A]
}
Run Code Online (Sandbox Code Playgroud)
我们只需要
AArray。数组不直接保存其值.数组本质上是一个结构,它保存对包含项的外部内存块的引用.因此,所有阵列占用相同数量的内存,并且在结构中使用它们没有问题.
展示:
struct Value {
var array: [Int] = []
}
var value = Value()
value.array = [0, 1, 2, 3] // this won't increase the size of the struct!
Run Code Online (Sandbox Code Playgroud)
如果数组的行为不同,您将无法动态更改其大小(例如追加元素)或使用其写时复制行为.本质上,数组和字典是包含在值类型中的类.
因此,您的代码可以编译,因为它不是真正的递归.
由于 child[] 可以为空,因此没有理由这不起作用。这编译得很好:
\n\nstruct Foo {\n let child: [Foo]\n}\n\nlet foo = Foo(child: [Foo(child:[Foo(child:[]), Foo(child:[])])])\nRun Code Online (Sandbox Code Playgroud)\n\n虽然我没有看到它有任何实际用途 \xe2\x80\x93 但我想知道是否有。
\n