【问题标题】:Xcode: Error: Index out of Range with arrayXcode:错误:索引超出范围与数组
【发布时间】:2020-11-06 19:02:36
【问题描述】:

我有一个函数可以在某个位置删除数组的元素。执行后我得到错误:索引超出范围。我不知道为什么。我的代码在“if self.liked1[j].id == id.id{”处标有错误。有人能帮我吗。提前致谢。

  func remove(id: datatype2){
        for j in 0..<self.liked1.count{
            
            if self.liked1[j].id == id.id{
                
                self.liked1.remove(at: j)
                
                let db = Firestore.firestore()
                
                db.collection((Auth.auth().currentUser?.email)!).document(self.liked1[j].id).delete()

            }
        }

    }

【问题讨论】:

    标签: arrays swift xcode


    【解决方案1】:

    当迭代你的集合索引并同时删除元素时,你应该总是向后做所有你需要的是反向迭代你的集合索引:

    func remove(id: datatype2){
        for index in self.liked1.indices.reversed() { 
            if self.liked1[index].id == id.id {
                self.liked1.remove(at: index)
                Firestore.firestore().collection(Auth.auth().currentUser!.email).document(self.liked1[index].id).delete()
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      每次调用 remove(at: ) 时,数组都会重新索引并变小,但 foror 循环仍会从 0 循环到初始数组大小,这就是导致索引越界错误的原因。

      【讨论】:

      • 谢谢。我能做些什么来避免这种情况。我想删除某些元素。我怎样才能做到这一点而不会出现错误?
      • @Tobi.M 您可以将数组向后循环,就像 Leo Dabus 在他的回答中所展示的那样。如果无法做到这一点,您可以保存索引并在循环结束后创建另一个以删除项目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多