2017-04-12 84 views
-1

我想填寫完成塊中的字典,但字典總是空的,當我打印它。我已經嘗試過分配它,並且還使用循環來逐個追加每個元素......任何洞察力都會被讚賞!原始字典(在完成塊中返回填充)爲什麼不復制/分配這個字典數組?

該數據是一個字典數組。

var friendsList : [[String : AnyObject]] = [[:]] 

fetchFriends(username: username) { (listOfFriends) in 

     print("data set is:") <-----This is working, the data set is full 
     print(listOfFriends) 

     //self.friendsList = listOfFriends <---this code didn't work 

     for person in listOfFriends {  <-------this code didn't work 
      for (key,value) in person { 
       let friend = [ key : value ] 
       self.friendsList.append(friend) 
      } 
     } 
    } 

我改變了代碼完成塊這裏面(不明白爲什麼這不會工作,要麼...)

for person in listOfFriends { 

      print(person) <-----this prints the correct information 
      self.friendsList.append(person) <----this is working here 
      print(self.friendsList) <---prints as expected 

     } 
    } 

後來,當我在viewDidLoad中打印friendsList後調用此函數來填充它,它只是打印[[:]]到控制檯

+0

你在哪裏打印'self.friendsList'來檢查值? –

+0

回溯,我可以看到你可以正確地追加'friendsList',所以這個數組很好。 「朋友」也一樣。所以接下來我想到的是字典部分,它是'人',正確的? (請注意,這是你的代碼,不是我的。)如果是這樣,某個地方我會認爲會有一個像「person [key] = value'或者friend [person.key]這樣的」Dictionary「 = person.value'。哪裏是?你的字典是如何填充的? – dfd

+0

@PhillipMills我在其他地方打印它 - 我可以在這裏上傳代碼,但它只是一個打印聲明:print(listOfFriends) – user7804097

回答

0

您在viewDidLoad中發現它爲空的原因是調用fetchFriends是異步的,所以它在調用viewDidLoad之後完成。

會發生什麼事是:

  • 你叫ferchFriends
  • 控制器被加載並viewDidLoad中被稱爲
  • 物業仍然是空
  • fetchFriends完成和財產數組正確填寫
+0

啊,我明白了......我對此很新,所以,在回答你的問題時,我可以在加載時看到這些信息嗎?經過一番研究之後,我在完成塊內嘗試了一些類似DispatchQueue.main.async {self.friendsList = listOfFriends}的方法,無濟於事 – user7804097

+0

如果您希望信息在viewdidLoad中可用,您應該在打開ViewController之前預加載fetchFriends。但可能你只需要在獲取友情鏈接時顯示一個微調指標 –

相關問題