在Swift 3.0中自定义类型数组插入崩溃

在Swift 3.0中自定义类型数组插入崩溃

问题描述:

我想在自定义类型数组中插入一个元素。但是我摆脱了索引错误。以下是我的代码:在Swift 3.0中自定义类型数组插入崩溃

var newCGList = [TTCareGiverItem]() 
if let snapshotItems = snapshot.value as? [String:Any]{ 
    for (_, snapshotData) in snapshotItems { 
     let dict = snapshotData as? NSDictionary 
     if let cgList = dict?.value(forKey: "ul") as? NSDictionary { 
      for cg in cgList{ 
       let cgKey = cg.key as! String 
       for ctr in 0 ..< self.careGiverList.count{ 
       let key = self.careGiverList[ctr].id as String 
       if key == cgKey{ 
       let order: Int = Int(cg.value as! String)! 
       let aCG = self.careGiverList[ctr] 
       aCG.order = order 
       newCGList.insert(aCG, at: ctr) 
       break 
       } 
       } 
      } 
     } 
    } 

我缺少什么?

+0

你需要使用的是'append(_ :)'not'insert(_:at)' –

+0

我需要在顺序列表中插入append不起作用。 – TechBee

+0

@TechBee为什么你使用插入而不是追加? –

newCGList在您尝试插入元素时为空。 不知道你为什么使用'newCGList.insert(aCG, at: ctr)',而是你可以使用'newCGList.append(aCG)'。

+0

我需要插入一个顺序列表append不起作用。 – TechBee

+0

对第一个元素使用append,然后尝试通过确保您没有插入到外部索引来插入。 –

如果你需要你的项目是在一定的指数,但该列表的大小比所需要那么大的折射率小,当然这是不可能的,你会得到错误(例如,在你的情况我猜测发生了什么只是有时候这些元素会被添加到列表中,所以正因为如此,您试图插入下一个元素的索引将大于列表的大小,因此导致该错误。这种情况下,你应该只使用从int到你的项目的字典)。否则,如果所有重要的事情都是为了他们的顺序,那么你可以做的是检查列表的大小是否小于你试图插入项目的索引。如果是,那么只需将它追加到末尾