私のアプリでフレンドリストを作成していますが、fetchfriendsはそのユーザーが友達であるユーザーのリストを作成し、ユーザーをフェッチしてから、情報。これはうまくいくようですが、なんらかの理由でフェッチユーザーが実行されてフェッチ先の友人が誰かにこれを手伝うことができますか?これは私のコードです。私は今ではコメントアウトされている条件文を試してみただけで、そのように2番目の関数を実行したことはありません。ファーストファンクションが最初に実行された後に呼び出される関数
override func viewDidLoad() {
super.viewDidLoad()
ref = FIRDatabase.database().reference()
friendsTableView.delegate = self
friendsTableView.dataSource = self
fetchfriends()
//if userspresent == true {
fetchuser()
// }
// Do any additional setup after loading the view.
}
func fetchfriends() {
ref.child("users").child(userID!).child("friends").observeSingleEvent(of: .value, with: { (snapshot) in
if let value = snapshot.value as? NSDictionary {
let userName = value["username"] as? String ?? ""
let friendid = value["userid"] as? String ?? ""
self.userIds.append(friendid)
self.userspresent = true
print(userName, friendid)
}
})
}
// var index1:Int = 0
//if userspresent == true {
func fetchuser() {
//let count = userIds.count
for index1 in 0...userIds.count-1 {
ref.child("users").child(userIds[index1]).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let user = User()
let userName = value?["username"] as? String ?? ""
let email = value?["email"] as? String ?? ""
let profileImageUrl = value?["profileImage"] as? String ?? ""
user.userName = userName
user.email = email
user.profileImageUrl = profileImageUrl
print(user)
self.users.append(user)
DispatchQueue.main.async {
self.friendsTableView.reloadData()
}
print(user.userName!, user.email!)
// print(snapshot)
}, withCancel: nil)
}
}
コードでは、非同期アクションを実行することをお勧めします。それはすぐにfetchfriends()を終了し、バックグラウンドで行動を起こします。 fetchfriends()は、fetchfriends()で起こったアクションに、そのプリント直後に移動することを検討するべきです。 –