Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将Firebase数据库值转换为UILabel文本?_Ios_Firebase_Swift3_Firebase Realtime Database - Fatal编程技术网

Ios 如何将Firebase数据库值转换为UILabel文本?

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": {

我正在尝试从Firebase数据库中读取值。然后,我想将UILabel文本更改为数据库子值。看起来很简单,但我不明白为什么该值为空

以下是我的Firebase JSON:

{
  "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)
}