2017-09-02 32 views
0

我面临的问题是我填充数据的数组,然后当我想稍后删除它时,即使我调用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个用户建议。

照片

enter image description here

enter image description here

+0

'userSuggestions'的类型是什么? – Abizern

+0

var usersSuggestion:[UserModel] = []。以空数组开始,在我的doSearch()函数中填充。 –

回答

0

您在阵列中插入一个元素后立即打印计数。这总是支持给予鉴于API.user ......功能使用完成处理的1

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

计数,我会假设,这发生在一个单独的线程或至少异步,所以你可以得到事件进入UI显示空白并突然显示的情况。

您可能希望以不同方式构造代码,以更好地传达请求数据和显示(异步获取)结果之间的分隔。嵌入式完成处理程序往往会产生误导,并给人一种印象,即执行将以其视觉上组织的顺序进行。

+0

我的问题是,我用usersSuggestion块测试了它,它确实工作正常。当我编写一个@(我正在构建连接标签的Instagram功能时),我可以链接用户而不会出现问题,当我通过#链接时,我可以正确链接标签,但是如果我再次与@链接,它仍然会显示来自标签数组的数据而不是用户数组,因为hashtags数组不是空的(它显示最新使用的hashtag)我希望现在它更清晰 –

+0

更具体:计数1始终打印出来,即使没有#或@在它的前面。这只发生在我链接了一个hashtag之后,但不在链接用户之后。 –

+0

要再次回到您的答案,甚至在没有#关闭时,打印语句甚至出现在空白处,因此计数总是为1 –