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 固定大小的数组在每次追加后都会改变大小的主要内容,如果未能解决你的问题,请参考以下文章