无法使用 Swift 5 (iOS) 从 Firebase 数据库中获取和打印单个值

Posted

技术标签:

【中文标题】无法使用 Swift 5 (iOS) 从 Firebase 数据库中获取和打印单个值【英文标题】:Unable to fetch and print a single value from a Firebase Database with Swift 5 (iOS) 【发布时间】:2020-04-05 14:15:15 【问题描述】:

目标: 尝试从我的 Firebase 实时数据库中将值“email”打印到 XCode 11 控制台中。请查看提供的代码和 JSON 摘录。

评论:一个似乎很明显的问题,但是在尝试了几个建议(包括Swift Get Specific Value From Firebase Database 和 Firebase 文档)之后,我似乎仍然错过了一些东西。

代码:

func updateRiskValue() 

    var databaseReference: DatabaseReference!

    databaseReference = Database.database().reference()

    let currentUser = Auth.auth().currentUser
    databaseReference.child("users").child((currentUser?.uid)!).child("email").observeSingleEvent(of: .value, with:  (snapshot) in

        let value = snapshot.value as? NSDictionary

        let valueRisk = value?["email"] as? String ?? ""

        print(valueRisk)

    ) (error) in
        print(error.localizedDescription)
    


@IBAction func riskSlider(_ sender: UISlider) 

    updateRiskValue()


JSON 摘录:

"users" : 
"ihhqjBDfIYeyl5QqsnFl1LVrXRG3" : 
  "email" : "alexander@gmail.com",
  "isCheckedCount" : 3,
  "kycitems" : 
    "Attach Government Documents" : 
      "isChecked" : false
    ,
    "Client Knowledge" : 
      "isChecked" : true
    ,
    "Contact Information" : 
      "isChecked" : true
    ,
    "PEP Check" : 
      "isChecked" : true
    ,
    "Risk Assessment" : 
      "isChecked" : true
    ,
    "Source of Wealth" : 
      "isChecked" : true
    ,
    "Transit Account Holders" : 
      "isChecked" : true
    ,
    "Transit Account Numbers" : 
      "isChecked" : false
    
  ,
  "password" : "123123",
  "riskValue" : "1",
  "todos" : 
    "Hello" : 
      "isChecked" : false
    

【问题讨论】:

【参考方案1】:

您正在向/Users/$uid/email 添加观察者,因此您获得的snapshot 仅包含email 属性的值。但是,您将其视为字典,这解释了为什么您的代码不起作用。

要解决此问题,请从

databaseReference.child("users").child((currentUser?.uid)!).child("email").observeSingleEvent(of: .value, with:  (snapshot) in

    let valueRisk = snapshot.value as? String
    print(valueRisk)

) (error) in
    print(error.localizedDescription)

【讨论】:

感谢您的建议!但是在应用时,该函数只返回“nil”。 糟糕,我在代码 sn-p 中有一个类型,但仍然尝试将其转换为字典。它现在正在转换为一个字符串,它应该可以工作(如果值存在)。

以上是关于无法使用 Swift 5 (iOS) 从 Firebase 数据库中获取和打印单个值的主要内容,如果未能解决你的问题,请参考以下文章

无法从 UIDocumentPickerViewController ios swift 获取 .doc 文件

使用 Swift 5 - PDFKit 在 iOS 中编辑和保存现有的 pdf 文档

在 swift 3 中下载文件时,alamo fire 中的进度视图不会更新

无法从 UITextField 获取文本 - Swift - iOS

无法从 Swift 中的 Facebook iOS SDK 捕获城市和国家/地区值

带有 iOS 5 部署目标的 Swift [重复]