Ios 如何将Firebase数据库值转换为UILabel文本?
我正在尝试从Firebase数据库中读取值。然后,我想将UILabel文本更改为数据库子值。看起来很简单,但我不明白为什么该值为空 以下是我的Firebase JSON:Ios 如何将Firebase数据库值转换为UILabel文本?,ios,firebase,swift3,firebase-realtime-database,Ios,Firebase,Swift3,Firebase Realtime Database,我正在尝试从Firebase数据库中读取值。然后,我想将UILabel文本更改为数据库子值。看起来很简单,但我不明白为什么该值为空 以下是我的Firebase JSON: { "pilots" : { "HpPzn0XUqMgsKhUOpH75lHIhyFA3" : { "pilot" : "First Lastname", "weight" : 180 } } } 以下是Firebase规则,目前仅用于测试: { "rules": {
{
"pilots" : {
"HpPzn0XUqMgsKhUOpH75lHIhyFA3" : {
"pilot" : "First Lastname",
"weight" : 180
}
}
}
以下是Firebase规则,目前仅用于测试:
{
"rules": {
"pilots": {
".read": true,
".write": true
}
}
}
最后是Swift 3代码,它可能和sin一样丑陋。阅读和在线课程后的第一个应用程序
import UIKit
import Firebase
import FirebaseCore
import FirebaseAuth
import FirebaseDatabase
class MainMenuViewController: UIViewController {
@IBOutlet weak var pilotUsername: UILabel!
@IBOutlet weak var dateTime: UILabel!
@IBOutlet weak var aircraftLabel: UILabel!
@IBOutlet weak var riskScoreInt: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let ref = FIRDatabase.database().reference()
let userID = FIRAuth.auth()?.currentUser?.uid
ref.child("pilots").child(userID!).child("pilot").observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let username = value?["username"] as? String ?? ""
self.pilotUsername.text = username
print(username)
// ...
}) { (error) in
print(error.localizedDescription)
}
}
}
我只是使用Firebase文档中的示例代码。后面有一行代码(示例中)
即:
let user = User.init(username: username)
但这给了我一个错误。“使用未解析的标识符‘用户’”
我不认为我需要那一行代码,因为在我后面的示例和课程中没有使用类似的代码
谢谢,这是事先准备好的。这是我第一次发布到堆栈溢出
import FirebaseDatabase
class User {
// MARK: Properties
var firstname: String
var lastname: String
var username: String { return "\(firstname)\(lastname)" }
// MARK: Initializers
init(firstname: String, lastname: String) {
self.firstname = firstname
self.lastname = lastname
}
init?(snapshot: FIRDataSnapshot) {
guard
let firstname = snapshot.childSnapshot(forPath: "First").value as? String,
let lastname = snapshot.childSnapshot(forPath: "Lastname").value as? String
else { return nil }
self.firstname = firstname
self.lastname = lastname
}
}
然后
你需要创建一个
User
类好的,我已经创建了User类,但是你的第二块代码让我有点困惑。I'm get a“Value‘user’已定义,但从未使用过”警告。UILabel仍然没有更改。我尝试替换以前的代码,并保留了一些,但构建失败。是的,我忘记添加self?.pilotUsername.text=user.username
没有更多错误!但是UILabel仍然没有改变,太奇怪了。在行中,让username=snapshot.childSnapshot(forPath:“username”)。值为?String else{
我已尝试将forPath:更改为pilots和pilot,但这似乎没有什么不同。在您用户(快照:快照)
之前,请打印快照并显示结果最后一位已启用登录尝试登录成功快照(pilot)First Lastname,因此它从数据库中的正确位置获取快照,但UILabel没有被更改。。。
import FirebaseDatabase
class User {
// MARK: Properties
var firstname: String
var lastname: String
var username: String { return "\(firstname)\(lastname)" }
// MARK: Initializers
init(firstname: String, lastname: String) {
self.firstname = firstname
self.lastname = lastname
}
init?(snapshot: FIRDataSnapshot) {
guard
let firstname = snapshot.childSnapshot(forPath: "First").value as? String,
let lastname = snapshot.childSnapshot(forPath: "Lastname").value as? String
else { return nil }
self.firstname = firstname
self.lastname = lastname
}
}
ref.child("pilots").child(userID!).child("pilot").observeSingleEvent(of: .value, with: { [weak self] (snapshot) in
if let user = User(snapshot: snapshot) {
self?.pilotUsername.text = user.username
}
}) { (error) in
print(error.localizedDescription)
}