正确删除数组中的数据

时间:2017-09-02 12:47:26

标签: arrays swift firebase-realtime-database

我遇到的问题是我用数据填充数组,当我想稍后删除它时,即使我调用removeAll(),数组仍然不为空。

更好地查看我的代码,以便更清楚地了解问题

更新了新代码

  @objc func textFieldDidChange() {

    doSearch()

    if let commentText = commentTextField.text , !commentText.isEmpty {
        sendButton.setTitleColor(UIColor.blue, for: UIControlState.normal)
        sendButton.isEnabled = true
        return
    }

    sendButton.setTitleColor(UIColor.lightGray, for: UIControlState.normal)
    sendButton.isEnabled = false
}


func doSearch() {
    let caption = commentTextField.text

    let words = caption?.components(separatedBy: CharacterSet.whitespacesAndNewlines)

    self.usersSuggestion.removeAll()


    for var word in words! {
        self.usersSuggestion.removeAll()


        if word.hasPrefix("@") {
            word = word.trimmingCharacters(in: CharacterSet.punctuationCharacters)
            self.isCellSelected = true
            self.usersSuggestion.removeAll()
            API.User.suggestUsers(withText: word, completion: { (user) in
            print("closure", word)


                self.usersSuggestion.append(user)
                self.tableView.reloadData()

                print("@", self.usersSuggestion.count)

            })

            self.usersSuggestion.removeAll()
            tableView.reloadData()


        } else {
            self.isCellSelected = false
            self.usersSuggestion.removeAll()
            tableView.reloadData()

        }
        self.usersSuggestion.removeAll()
        tableView.reloadData()
    }



}

我在这里遇到的问题是数组,即使我多次调用removeAll()方法,也永远不会回到0.当我有2个用户时,链接一个,下次我写@我得到了2个用户+链接用户(所以他两次)。我可以无限制地完成它,只有2个现有用户拥有100个userSuggestions。

照片

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

在数组中插入元素后立即打印计数。这将总是计算1。

                                       // count was zero
self.hashTags.insert(hashTag, at: 0)   // adding one
print("# = ", self.hashTags.count)     // count is now 1

鉴于API.user ...函数使用了一个完成处理程序,我认为这发生在一个单独的线程中或者至少是异步的,所以你可以让事件进入UI显示为空并突然显示一个的情况。 / p>

您可能希望以不同方式构造代码,以更好地传达请求数据与显示(异步获取)结果之间的分离。嵌入式完成处理程序往往具有误导性,给人的印象是执行将以其视觉组织的顺序发生。