This question already has answers here:
Swift closure not setting variable
(2个答案)
7个月前关闭。
到目前为止,我能够在用户登录后填充我的文本标签。所以一旦他们这样做了,主页上就会显示“欢迎johndoe”(johndoe是他们注册的用户名)。不过,我也有一个汉堡包样式的表视图,其中有他们的配置文件信息,其中包含他们的用户名、位置和他们的配置文件图像。在tableview中使用相同的用户名(johndoe)填充用户名时遇到问题。
我试图使用一个全局变量来保存用户名字符串,但是我一直得到默认值“No Name”
通过使用username值,我试图将其分配给我的profile items表视图:
但是,一旦加载tableview,它只会说“没有名字”。目标是拥有与欢迎标题标签上相同的用户名。
如有任何帮助,我们将不胜感激。谢谢!
在完成闭包时,您将始终看到没有名字
(2个答案)
7个月前关闭。
到目前为止,我能够在用户登录后填充我的文本标签。所以一旦他们这样做了,主页上就会显示“欢迎johndoe”(johndoe是他们注册的用户名)。不过,我也有一个汉堡包样式的表视图,其中有他们的配置文件信息,其中包含他们的用户名、位置和他们的配置文件图像。在tableview中使用相同的用户名(johndoe)填充用户名时遇到问题。
我试图使用一个全局变量来保存用户名字符串,但是我一直得到默认值“No Name”
var username : String = "No Name"
func getUserName() {
let databaseRef = Database.database().reference()
guard let userID = Auth.auth().currentUser?.uid else { return }
databaseRef.child("users").child(userID).observeSingleEvent(of: .value) { (snapshot) in
let theUserName = (snapshot.value as! NSDictionary)["nameOfUser"] as! String
self.username = theUserName
self.nameOfUserLabel.text! = "Welcome \(self.username)"
//this prints out the correct label by saying "Welcome johndoe"
}
print("The name of the user is: \(self.username)")
//for example it would print out in the console: "No Name"
}
通过使用username值,我试图将其分配给我的profile items表视图:
func createProfileArray() -> [ProfileItems] {
var tempProfileItems: [ProfileItems] = []
let profileItem = ProfileItems(profileImage: UIImage(named: "defaultUser")!, nameTitle: username, location: "Toronto")
tempProfileItems.append(profileItem)
return tempProfileItems
}
但是,一旦加载tableview,它只会说“没有名字”。目标是拥有与欢迎标题标签上相同的用户名。
如有任何帮助,我们将不胜感激。谢谢!
最佳答案
不能对获取名称的方法的调用是异步的(observeSingleEvent
),因此请查看它执行的实际序列
guard let userID = Auth.auth().currentUser?.uid else { return } // 1
databaseRef.child("users").child(userID).observeSingleEvent(of: .value) { (snapshot) in
let theUserName = (snapshot.value as! NSDictionary)["nameOfUser"] as! String
self.username = theUserName
self.nameOfUserLabel.text! = "Welcome \(self.username)" // 3
//this prints out the correct label by saying "Welcome johndoe"
}
print("The name of the user is: \(self.username)") // 2
在完成闭包时,您将始终看到没有名字
关于swift - 从Firebase封闭返回数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55893747/
10-08 21:47