我有一个字符串数组,我想检查索引处的数组是否为空,而不是插入元素,如果它不为空,我必须更改此元素的值。 我试过这个:
var AnsArray = [String]()
let a_id = "Hello"
if (AnsArray[Indexpath.row].isEmpty){
AnsArray.insert(a_id, at: Indexpath.row)
}
else {
AnsArray[Indexpath.row] = a_id
}
但它给出了一个错误:
致命错误:索引超出范围
我也试过这个:
if (AnsArray[Indexpath.row] == "" ) {
AnsArray.insert(a_id, at: Indexpath.row)
}
else {
AnsArray[Indexpath.row] = a_id
}
它也给出了同样的错误。
注意:我不能使用array.count,因为数组可以包含元素 例如,在index = 0处的特定索引,它可以是空的并且在index =处 2它可以存储一些数据。
答案 0 :(得分:2)
你应该检查第一个索引是否可用。如果你直接按索引访问元素,你可能会得到索引超出范围异常(如果没有)。因此,您可以通过包含属性的指数进行检查
if AnsArray.indices.contains(YOUR_INDEX) {
//Now you can check whether element is empty or not.
// Do your tuffs
}else {
//insert new element
}
答案 1 :(得分:1)
您似乎想要访问数组边界之外的项目。您的数组为空,因此调用AnsArray[whateverIndexPath]
将始终导致此错误。
重要的是,Array
无法保留nil
值 - 如果您的数组为空,则无法在特定索引处检查",就像你描述的那样。
此外,您无法insert
空数组中的项目 - 您插入的索引在插入之前必须已经有效。
因此,如果要向数组插入内容,则需要从append
开始。或者,也可以使用空字符串预先填充数组。
AnsArray = [String](repeating: "", count: yourDesiredArrayCount)
if (AnsArray[Indexpath.row].isEmpty){
AnsArray[Indexpath.row] = "newValue"
}