合并数组并删除重复项Swift&火力地堡

时间:2016-07-30 15:29:01

标签: arrays swift firebase firebase-realtime-database

我有一个从Firebase数据库中检索数据的应用程序。我的问题是,每当数据更新时,它都会检索一个全新的数据数组(并将其附加到数组的末尾)。例如,如果我的数组是:

["A", "B", "C", "D", "E"]

我尝试删除D(在tableView中;当我滑动删除时,它会从Firebase中删除条目),数组变为

["A", "B", "C", "E", "A", "B", "C", "E"]

我在返回数组之前尝试使用数组removeAll()方法,但我的tableView在完成之前刷新;所以它崩溃说索引超出范围。无论如何,我可以在我的数据库更新函数中创建第二个数组,然后使用我的主数组调用合并方法,并防止每次都添加重复项?谢谢!

代码:

    self.conditionRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in

        self.stocks.removeAll()
        self.stockObjects.removeAll() 

        if snapshot.value is NSNull {
            print("nothing found")
            self.title = "No Results"
        }
        else {

            for i in snapshot.children {
                self.stocks.append(i.key)
            }
            print(self.stocks)

        }

        for stock in self.stocks {

            let stockSnapshot = self.conditionRef.child(stock)
            stockSnapshot.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in



                if snapshot.value is NSNull {
                    print("nothing found")
                } else {


                    let price = snapshot.childSnapshotForPath("price").value as! String

                    let volume = snapshot.childSnapshotForPath("volume").value as! String

                    let stockObj = StockObject(name: stock, price: price, volume: volume)

                    self.stockObjects.append(stockObj)

                    print(stockObj.name)
                    print(stockObj.price)
                    print(stockObj.volume)

                }
                self.tableView.reloadData()
            })
        }

    })

更新:我通过将我的StockObject类转换为equatable并将此函数添加到类中来解决了我的问题:

 func == (lhs: StockObject, rhs: StockObject) -> Bool {
     return lhs.name == rhs.name
 }

然后,在我上面的代码中,我用这个替换了我追加到数组的行:

if self.stockObjects.contains(stockObj) == false {
    self.stockObjects.append(stockObj)
}

到目前为止,一切正常。关于这可能会崩溃的任何想法?

0 个答案:

没有答案