【问题标题】:Swift fixed sized array changes size after every appendSwift 固定大小的数组在每次追加后都会改变大小
【发布时间】: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 的内容。

标签: arrays swift uitableview


【解决方案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,我也会添加您的评论。
猜你喜欢
  • 1970-01-01
  • 2016-10-29
  • 2016-10-02
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
相关资源
最近更新 更多