【发布时间】:2018-10-08 18:15:15
【问题描述】:
我有三个函数getNewOrder()、storeOrderDetails(_ details:[String:String]) 和getUserInfo(_ userID:String)。
- 函数
getNewOrder()首先被调用。它获取新订单(.childAdded 值)并将字典发送到storeOrderDetails(_ details:[String:String])。 - storeOrderDetails(_ details:[String:String])
then segregate all the values and callsgetUserInfo(_ userID:String)` 传递其详细信息中存在的用户 ID。 -
getUserInfo(_ userID:String)然后获取用户详细信息并返回用户的 信息。
但是,问题是 [userInfo = getUserInfo(_ userID:String) in storeOrderDetails(_ details:[String:String])] userInfo 始终为空。显然func getUserInfo(_ userID:String) 在返回空值后进入完成块。
我希望这三个函数按顺序执行。 非常感谢任何建议。
请按照以下链接查看我的代码。 https://imgur.com/hNjvyDk https://imgur.com/J0LMXMg
func childAdded(){
let ref = Database.database().reference().child("Orders").child(todaysDate)
ref.observe(.childAdded) { (snapshot) in
var details = [String:String]()
if let orderID = snapshot.key as? String {
ref.child(orderID).observeSingleEvent(of: .value, with: { (snap) in
self.newOrderTextView.text = ""
self.customerNameLabel.text = ""
self.customerPhoneLabel.text = ""
self.orderNumberLabel.text = ""
let enumerator = snap.children
while let rest = enumerator.nextObject() as? DataSnapshot {
details[rest.key as? String ?? ""] = rest.value as? String ?? ""
}
self.storeUserDetails(details)
})
}
}
}
func storeUserDetails(_ details:[String:String]){
if details["CustomerID"] != nil {
userInfo = getUserDetails(details["CustomerID"]!)
print(userInfo)
}
if !userInfo.isEmpty{
let order = OrderDatabase()
order.customerEmail = userInfo["Email"]!
order.customerName = userInfo["Name"]!
order.orderAcceptStatus = details["OrderStatus"]!
order.customerOrderNumber = details["orderNumber"]!
order.orderID = details["orderID"]!
order.time = details["Time"]!
order.customerFirebaseID = details["CustomerID"]!
self.orderDatabase[details["orderNumber"]!] = order
self.orderTable.reloadData()
}
}
func getUserDetails(_ userID:String) -> [String:String]{
var details = [String:String]()
let userDetailsReference = Database.database().reference().child("Users")
userDetailsReference.child(userID).observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
if let dictionary = snapshot.value as? NSDictionary {
self.customerNameLabel.text = dictionary.value(forKey: "Name") as? String
self.customerPhoneLabel.text = dictionary.value(forKey: "Email") as? String
details["Name"] = dictionary.value(forKey: "Name") as? String
details["Email"] = dictionary.value(forKey: "Email") as? String
}
})
return details
}
【问题讨论】:
-
您能否编辑您的代码以将功能显示为一个整体,以便我们更好地为您提供帮助。
-
您需要将代码放在这里,而不是代码图片的链接。不看代码很难理解你的确切问题
-
对不起,这里的代码没有对齐我试图发布它,但由于某种原因,一半的代码格式正确,其余代码在单行中。对于给您带来的不便,我深表歉意。
-
如果您使用的是 XCode,您可以将文本移至左边距,复制并粘贴到您的问题中。然后选择问题中的文本并使用 {} 代码格式化括号将其格式化为代码。投票结束,因为没有代码问题没有上下文,任何答案都只是猜测。如果您可以包含代码,我敢打赌我们可以回答。
标签: ios swift firebase firebase-realtime-database swift3