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

2023-12-01

我有以下 Firebase 实时数据库结构:

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: { ... }
}

具有以下“Post”结构:

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                                    
    ]

} 

在写入 firebase 数据库时,我如何解释子节点“海报”,因为使用/字符崩溃。


因此,基于我的两(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
        ]

    }

}

希望这对其他人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 底层提供者在开放实体框架上失败

    我正在网络应用程序中取消实体框架 早些时候一切都工作正常 但后来我从 Sql Server 中删除了数据库 之后 每当我运行该应用程序时 我都会收到以下异常 The underlying provider failed on open en
  • Numpy 数组切片

    我有一个一维 numpy 数组和一些偏移 长度值 我想从该数组中提取属于偏移量 偏移量 长度范围内的所有条目 然后将其用于从原始数组构建一个新的 简化 数组 该数组仅包含由偏移量 长度对选取的值 对于单个偏移 长度对 这对于标准数组切片来说
  • 将函数应用于 data.table 中的每个指定列并按引用更新

    我有一个 data table 我想用它对某些列执行相同的操作 这些列的名称在字符向量中给出 在这个特定的示例中 我想将所有这些列乘以 1 一些玩具数据和指定相关列的向量 library data table dt lt data tabl
  • SSH 在通过 ipv6 连接时超时,但适用于 ipv4 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 昨天我重新安装了 Ubuntu 出于不相关的原因 从那时起 ssh 的行为就非常奇怪 连接需要很长时间 几分钟 使用 vvv 我发现它首先尝试使用 ipv6 连接 超时 然后尝试通过
  • Git - 如何将本地存储库提交到另一个本地存储库的子文件夹?

    我有一段时间开始了一个 Django 项目 并将其托管在 bitbucket 上 现在我需要将它托管在 openshift 上 方法是它们为您提供一个 git 存储库 每次您推送时它们都会自动部署 问题是存储库附带了几个用于配置和设置的顶级
  • 同一主机/端口上的 Wcf HTTP 和 HTTPS

    Hello 我知道如何为 http 或 https 创建自托管 wcf 但不能同时创建 我想要这两个网址的 wcf https 127 0 0 1 13070 ProxySips http 127 0 0 1 13070 ProxySips
  • rust 宏扩展忽略标记 `,` 和任何后续内容

    这确实有效 macro rules x2 x expr gt x x let a x2 0 但非常相似 macro rules x2 x expr gt x x removed brackets let a x2 0 added brack
  • 如何让msbuild不重建所有项目

    我们有CCnet msbuild tfs 为每个项目配置构建 我们没有使用解决方案进行构建 问题是如果我们只创建 1 个项目 我们应该如何配置构建而不再次重建所有项目 与源代码控制中的一个确切项目相关的更改 有什么办法可以提出一些条件吗 应
  • 在 Flask 应用程序中运行 Dash 应用程序

    我有一个现有的 Flask 应用程序 并且我想要一条通往另一个应用程序 更具体地说 第二个应用程序是阴谋冲刺应用程序 如何在现有 Flask 应用程序中运行 Dash 应用程序 app route plotly dashboard def
  • 如何在DataGridTextColumn中显示Enum类型?

    我已经列出了列表 并将这些列表绑定到工作正常的数据网格 但在该规则类中 我有一个枚举类型 即 类型 因此在数据网格中 我将类型列设置为空 那么我如何获得枚举输入数据网格列请帮助我 谢谢 nagaraju 通常它应该通过绑定直接转换为它的字符
  • 通过IP地址获取用户位置[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我有一个用 C 编写的 ASP NET 网站 在此站点上 我需要根据用户的位置自动显示起始页 我可以根据用户的IP地址获取用户所在城市的名称吗 您需
  • ASP.NET 表单身份验证

    我有以下 ASP NET 表单身份验证配置
  • 有序地图实现

    我正在寻找一个 Map 实现 它按照添加键值对的顺序迭代键值对 例如 Map orderedMap instantiation omitted for obvious reasons orderMap put 4 d orderMap pu
  • 如何使用 GPML (Matlab) 进行回归的 2D 高斯过程?

    我有一个Nx2输入矩阵称为X 我也有输出值Y这是一个向量Nx1 我创建一些数据进行测试 如下所示 Xtest linspace x min x max n Ytest linspace y min y max n 所以 矩阵Z is of
  • 如何在 Flutter 中制作 AlertDialog?

    我正在学习在 Flutter 中构建应用程序 现在我来到了警报对话框 我以前做过Android and iOS 但是如何在 Flutter 中发出警报呢 以下是一些相关的问题 如何在 Flutter 中设置 AlertDialog 操作的样
  • 在批处理文件中将字符串转换为整数

    我有一个从文件中读取的变量 var 13 145 我想将此值添加到另一个值 set a var var 5 但结果是13 5 not 13145 5 如何从字符串中删除这个 不要添加逗号 set var 13145 另外 在分配变量时 不要
  • 如何正确处理 onclick 事件和 onblur

    以下帖子与我之前提出的问题相关here 尽管这两个问题是独立的 但它们确实与我实现的相同功能相关 预测文本 我遇到的问题与这两个事件的方式有关onblur and onclick叫做 当用户在文本框中输入一些字符并决定单击建议而不是完成输入
  • 在 Android 中禁用后退按钮(不起作用)

    package com my app import java io ByteArrayOutputStream import java io File import java io FileOutputStream import java
  • 在 Mac 上安装的 VSTS 代理中运行 powershell 构建步骤?

    我在 mac 上安装了 VSTS 构建代理来构建 xamarin iOS 项目 构建工作正常 直到我添加了 powershell 构建步骤 即使我安装了 powershell for mac https github com PowerSh
  • 在 SwiftUI 中读取带有子节点的 Firebase 实时数据库父节点时出现问题

    我有以下 Firebase 实时数据库结构 posts user1 uid Kfm0p2EMcrpN8XcLOR5 created at 1490119356 786182 image height 374 9999999999999 im