在SwiftUI中读取带有子节点的Firebase实时数据库父节点时出现问题

学习代码

我具有以下Firebase Realtime数据库结构:

posts: {
    user1_uid: {
        -Kfm0p2EMcrpN8XcLOR5: {
            created_at: 1490119356.786182,
            image_height: 374.9999999999999,
            image_url: "ttps://firebasestorage.googleapis.com/v0/b/mak...",
            like_count: 4,
            poster: {
                uid: user1_uid,
                username: "testuser"
            }
        },
        -KgGuLttcC3PJbD8pWAT: { ... },
        -KgLo0OrineV8l3_K9gK: { ... }
    },
    user2_uid: { ... },
    user3_uid: { ... }
}

具有以下“发布”结构:

init?(snapshot: DataSnapshot) {
        
    guard
        
        let value = snapshot.value as? [String: AnyObject],
        
        let uID = value["poster/uid"] as? String,
        let userName = value["poster/username"] as? String,
        
        let text = value["text"] as? String,
        let likes = value["likes"] as? Int,
        let created = value["created"] as? String,
        
        let iHeight = value["imageheight"] as? Double,
        let imageName = value["imagename"] as? String
        
    else {
        
        print("************************************************")
        print("PostStore init?(snapshot: DataSnapshot) ERROR!!!")
        print("************************************************")
        
        return nil
    
    }
    
    self.id = snapshot.key
    
    self.uID = uID!
    self.userName = userName!
    
    self.text = text!
    self.created = created!
    self.likes = likes!
    
    self.iHeight = iHeight!
    self.imageName = imageName!
    
}

当我运行代码时,我总是else portion of the statement executed with the error打印出来吗?

我认为问题在于以下代码:

let uID = value["poster/uid"] as? String,
let userName = value["poster/username"] as? String,

因为它有一个子节点。我不确定如何在信息中访问该节点?

有人可以帮忙吗!

*******更新******

另一方面,我将如何写入当前拥有的数据库:

func toAnyObject() -> Any {                  

    return [                          
        "poster/username": userName,             
        "poster/uid": uID,             
        "text": text,             
        "created": created,              
        "likes": likes,             
        "imageheight": iHeight,             
        "imageName": imageName                                    
    ]

} 

当使用/char崩溃时,如何在写入Firebase DB时说明子节点“海报”

学习代码

因此,基于我的两(2)部分问题;最初,这只是一(1)个问题,但是在Asperi为我提供了一个很好的答案以解决最初的阅读问题之后,写作部分变成了问题,之后变成了两(2)。

我的答案结合了他的上述答案,然后我修改了其余内容,以满足对Firebase的读写要求。

struct Post: Identifiable {

    var id: String
    var profile: Profile?
    var uID: String
    var userName: String
    var text: String
    var created: String
    var likes: Int
    var iHeight: Double
    var imageName: String

    init(id: String, profile: Profile, text: String, created: String, likes: Int, iHeight: Double, imageName: String ) {

        self.id = id
        self.profile = profile
        self.userName = profile.userName
        self.uID = profile.uID
        self.text = text
        self.created = created
        self.likes = likes
        self.iHeight = iHeight
        self.imageName = imageName

    }

    init?(snapshot: DataSnapshot) {

        guard
        
            let value = snapshot.value as? [String: AnyObject],
            let poster = value["poster"] as? [String: AnyObject], 
        
            let uID = poster["uid"] as? String,
            let userName = poster["username"] as? String,
            let text = value["text"] as? String,
            let likes = value["likes"] as? Int,
            let created = value["created"] as? String,
            let iHeight = value["imageheight"] as? Double,
            let imageName = value["imagename"] as? String
        
        else {
        
            return nil
        
        }
    
        self.id = snapshot.key
        self.uID = uID
        self.userName = userName
        self.text = text
        self.created = created
        self.likes = likes
        self.iHeight = iHeight
        self.imageName = imageName
    
    }

    func toAnyObject() -> Any {
    
        return [
            "poster": profile!.toAnyObject(), 
            "text": text,
            "created": created,
            "likes": likes,
            "imageheight": iHeight,
            "imagename": imageName
        ]
    
    }

}

struct Profile: Codable {

    let uID: String
    let userName: String

    func toAnyObject() -> Any {

        return [
            "uid": uID,
            "username": userName
        ]

    }

}

希望这对其他人有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Firebase实时数据库读取特定数据

来自分类Dev

Firebase实时数据库一次更新多个节点

来自分类Dev

在React Native中如何在Firebase Real Time实时数据库中生成子节点

来自分类Dev

使用IOS-Swift读取Firebase实时数据库子节点

来自分类Dev

Firebase实时数据库:如何获取父节点的值

来自分类Dev

实时数据库中根节点和名称空间节点之间最好的是什么?

来自分类Dev

在Flutter应用程序中从Firebase实时数据库事件获取父节点

来自分类Dev

在删除Firebase实时数据库阵列中的节点后自动更改节点号

来自分类Dev

如何从Firebase实时数据库读取数据

来自分类Dev

我的Firebase实时数据库安全规则出现问题

来自分类Dev

Firebase实时数据库读取数据

来自分类Dev

Firebase实时数据库-基于访问节点设置多个.on()侦听器

来自分类Dev

如何从Xamarin.Forms上的Firebase实时数据库获取ID节点(密钥)

来自分类Dev

使用Firebase CLI更新实时数据库中集合的每个节点中的项目

来自分类Dev

Firebase实时数据库:如何侦听节点项的特定子集?

来自分类Dev

尝试在Xamarin iOS中将项目添加到数据库时出现Firebase实时数据库问题

来自分类Dev

PHP从数据库读取数据时出现问题

来自分类Dev

读取sqllite数据库时出现问题

来自分类Dev

迭代嵌套的Firebase数据库节点时出现DatabaseException

来自分类Dev

Firebase 实时数据库的问题

来自分类Dev

检查 Firebase 实时数据库节点值的相等性并更改它的最有效方法是什么?

来自分类Dev

如何在不知道firebase实时数据库中的父元素的情况下访问子元素?

来自分类Dev

如何在节点上使用管理 SDK 访问实时数据库时指定有效的 uid

来自分类Dev

从 Google Firebase 实时数据库读取 Google 地图标记数据时遇到问题

来自分类Dev

在 firebase 实时数据库中跨多个节点搜索

来自分类Dev

从 Cloud Functions 实时数据库中的子引用获取父节点的原始值“val()”数据

来自分类Dev

如何在firebase实时数据库android中的唯一键下获取特定节点

来自分类Dev

仅在 firebase 实时数据库中的一个节点上禁用读取规则

来自分类Dev

如何从 Firebase 实时数据库 Java 中的子节点检索数组数据?(Firebase 回收器适配器)

Related 相关文章

  1. 1

    从Firebase实时数据库读取特定数据

  2. 2

    Firebase实时数据库一次更新多个节点

  3. 3

    在React Native中如何在Firebase Real Time实时数据库中生成子节点

  4. 4

    使用IOS-Swift读取Firebase实时数据库子节点

  5. 5

    Firebase实时数据库:如何获取父节点的值

  6. 6

    实时数据库中根节点和名称空间节点之间最好的是什么?

  7. 7

    在Flutter应用程序中从Firebase实时数据库事件获取父节点

  8. 8

    在删除Firebase实时数据库阵列中的节点后自动更改节点号

  9. 9

    如何从Firebase实时数据库读取数据

  10. 10

    我的Firebase实时数据库安全规则出现问题

  11. 11

    Firebase实时数据库读取数据

  12. 12

    Firebase实时数据库-基于访问节点设置多个.on()侦听器

  13. 13

    如何从Xamarin.Forms上的Firebase实时数据库获取ID节点(密钥)

  14. 14

    使用Firebase CLI更新实时数据库中集合的每个节点中的项目

  15. 15

    Firebase实时数据库:如何侦听节点项的特定子集?

  16. 16

    尝试在Xamarin iOS中将项目添加到数据库时出现Firebase实时数据库问题

  17. 17

    PHP从数据库读取数据时出现问题

  18. 18

    读取sqllite数据库时出现问题

  19. 19

    迭代嵌套的Firebase数据库节点时出现DatabaseException

  20. 20

    Firebase 实时数据库的问题

  21. 21

    检查 Firebase 实时数据库节点值的相等性并更改它的最有效方法是什么?

  22. 22

    如何在不知道firebase实时数据库中的父元素的情况下访问子元素?

  23. 23

    如何在节点上使用管理 SDK 访问实时数据库时指定有效的 uid

  24. 24

    从 Google Firebase 实时数据库读取 Google 地图标记数据时遇到问题

  25. 25

    在 firebase 实时数据库中跨多个节点搜索

  26. 26

    从 Cloud Functions 实时数据库中的子引用获取父节点的原始值“val()”数据

  27. 27

    如何在firebase实时数据库android中的唯一键下获取特定节点

  28. 28

    仅在 firebase 实时数据库中的一个节点上禁用读取规则

  29. 29

    如何从 Firebase 实时数据库 Java 中的子节点检索数组数据?(Firebase 回收器适配器)

热门标签

归档