Swift 固定大小的数组在每次追加后都会改变大小

Posted

技术标签:

【中文标题】Swift 固定大小的数组在每次追加后都会改变大小【英文标题】:Swift fixed sized array changes size after every append 【发布时间】:2020-11-03 14:49:07 【问题描述】:

我创建了一个固定大小的数组来从textfields 收集用户数据。每个textfield 位于不同的单元格中。所以我将所有用户答案收集在一个固定数组中

var userSelectionText = [String](repeating: "", count: 17)

真正奇怪的是,每次我根据单元格的行号在数组中的某个索引中插入一个字符串时,数组大小都会增加+1。

self.userSelectionText.insert(diseaseSelectionArray[row], at: tappedTextFieldTag)

当我在第一次加载视图时打印出数组时,我有 17 个项目

["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]

在固定大小数组的某个索引中添加一个字符串后,我有 17 个项目 + 1

["", "", "No", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]

为什么?我需要修复它们以反映 tableview 中的确切行数

【问题讨论】:

Swift 中没有“固定大小的数组”。您创建一个包含 17 个元素的数组。如果插入另一个元素,则它有 18 个元素。 正如@MartinR 指出的那样,尚不支持“固定大小的数组”。在上面的代码中,您可以使用下标来替换对象,而不是使用插入函数。 userSelectionText[tappedTextFieldTag] = diseaseSelectionArray[row] 我建议您阅读 Swift 编程语言书籍中有关 arrays 的内容。 【参考方案1】:

您正在向数组中插入(添加)元素,但您想要替换现有元素:

var array = ["", "", ""]
print(array)
print(array.count)
array.replaceSubrange(Range(0 ... 0), with: ["1"])
print(array)
print(array.count)

这个输出:

["", "", ""]
3
["1", "", ""]
3

或者,甚至更短(感谢@Joakim Danielson):

array[0] = "1"

【讨论】:

为什么不array[0] = "1" 惯性使用现有的 API,我也会添加您的评论。

以上是关于Swift 固定大小的数组在每次追加后都会改变大小的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中,追加数组的效率如何?

在 Swift 中检查 2 个固定大小的数组是不是相等的最快方法是啥?

在 UIWebView 中调整文本大小 - Swift 3

每次将大约固定大小的字节数组发送到另一个方法

数组追加在 Swift 上不起作用

C++ 动态数组每次添加都会将大小增加 1 - 错误