2017-09-02 8 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つのユーザー、リンク1、次回は@私は2人のユーザー+リンクユーザーを取得する(ので、彼は2回)。私はそれを無限に行うことができます.100人のuserSuggestionsのように2人の既存のユーザーしかいないのです。

写真

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の機能を構築しています)私は#を使ってリンクすると問題なくリンクすることができますが、ハッシュタグを正しくリンクすることができますが、@に再びリンクするとハッシュタグ配列ハッシュタグ配列が空ではないので(最近使用されたハッシュタグを表示しているので)、私はより明確になることを願っています。 –

+0

さらに具体的には、カウント1は常に#またはその前に@を付けます。これは、1つのハッシュタグをリンクした後にのみ発生しますが、ユーザーをリンクした後には発生しません。 –

+0

答えにもう一度戻るには、空白を書くことでprintステートメントが表示されるので、#が近くにない場合でも、カウントは常に1です。 –

関連する問題