Arrays 正在更新旧代码,什么是数组(未初始化容量:1024,初始化为:0)

Arrays 正在更新旧代码,什么是数组(未初始化容量:1024,初始化为:0),arrays,swift,Arrays,Swift,我以前从未遇到过此API: var a: [Number] = Array(_unsafeUninitializedCapacity: 1024, initializingWith: 0) 这似乎很简单: var a: [Number] = Array(repeating: 0, count: 1024) 然而,我学会了永远不要相信我对斯威夫特的直觉。有谁熟悉这个API并能告诉我我的转换是否在做同样的事情吗?这几乎是一回事,但不完全是一回事(尽管你的语法一开始似乎是错误的) 首先简要介绍如何

我以前从未遇到过此API:

var a: [Number] = Array(_unsafeUninitializedCapacity: 1024, initializingWith: 0)
这似乎很简单:

var a: [Number] = Array(repeating: 0, count: 1024)

然而,我学会了永远不要相信我对斯威夫特的直觉。有谁熟悉这个API并能告诉我我的转换是否在做同样的事情吗?

这几乎是一回事,但不完全是一回事(尽管你的语法一开始似乎是错误的)

首先简要介绍如何为阵列分配内存。通常会有一个指向数组第一个元素的指针,然后每个值都会占用连续的内存插槽。例如,大小为4且分配了4个内存插槽的阵列可能占用内存插槽100->103。如果我们要添加第5个元素,我们必须将指针更改为一个新的具有更大容量的起始内存插槽,然后复制原始数组上的所有元素,然后添加新元素。如果阵列内存不断溢出,这可能会变得效率低下(尽管现代手机可以轻松处理这一问题)

第一个,
数组(\u unasfeunInitializedCapacity:initializingWith:)
是一个初始化器,它允许您访问未初始化的内存插槽。但基本上是说要为1024个条目分配足够的内存,而
初始化是一个在创建数组时填充一些内容的机会

您可以这样使用它:

var myArray=Array(unsafeUninitializedCapacity:10){buffer,initializedCount in

对于1中的x..是吗?我想这是同一个。但是,再一次,链接显示它在Xcode 11中是新的。@MauryMarkowitz链接的函数不完全相同,但无论如何,我不认为你对该文档有什么问题。我从未使用过该函数,但它的功能对我来说非常清楚。不过,示例用法会很好。详细解释了here:啊,是的,这是我担心的事情。问题是初始化为:必须是一个闭包,但我想{0}已经足够好了?编辑,现在应该更好了。有趣的问题仍然不确定为什么要使用第一个,但实际上是兴趣。。
Array(_unsafeUninitializedCapacity: XXX, initializingWith: "0 for the first 1024 slots")