我遇到的问题是我用数据填充数组,当我想稍后删除它时,即使我调用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。
照片
答案 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>
您可能希望以不同方式构造代码,以更好地传达请求数据与显示(异步获取)结果之间的分离。嵌入式完成处理程序往往具有误导性,给人的印象是执行将以其视觉组织的顺序发生。