检查特定索引Swift上的非可选字符串数组是否为空。不使用计数功能

时间:2017-07-18 06:53:46

标签: arrays swift

我有一个字符串数组,我想检查索引处的数组是否为空,而不是插入元素,如果它不为空,我必须更改此元素的值。 我试过这个:

    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它可以存储一些数据。

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"
}