从 firebase 数据库检索计算平均值

2023-12-07

我正在创建一个 iOS 应用程序,该应用程序使用每个地点的地名和评级。我已经把事情做好了。我的意思是,我将数据保存到数据库中,并且我也可以读取它们。唯一的问题是,当我阅读它们时,我希望它们通过计算每个位置的平均值来加载到我的 tableviewcell 上。查看屏幕截图,如果您不明白什么,请让我编辑答案。

表格视图

TableView

Firebase

Firebase

我的代码将数据加载到表视图

import UIKit
import FirebaseDatabase

class PlacesTableViewController: UITableViewController {

    //MARK: Properties
    @IBOutlet weak var placesTableView: UITableView!
    var dbRef:FIRDatabaseReference?
    var places = [Places]()
    private var loadedLabels = [String: String]()
    private var loadedRatings = [String: Int]()
    override func viewDidLoad()
    {
        super.viewDidLoad()

        dbRef = FIRDatabase.database().reference()

        // Loads data to cell.
        loadData()
    }
    override func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {   
        //return the number of rows
        return places.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        // Table view cells are reused and should be dequeued using a cell identifier.


        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? PlacesTableViewCell  else {
            fatalError("The dequeued cell is not an instance of PlacesTableView Cell.")
        }

        let place = places[indexPath.row]

        cell.placeLabel.text = place.name
        cell.ratingControl.rating = place.rating

        return cell

    }
    private func loadData()
    {
        dbRef!.observe(.childAdded, with: {
            (placeSnapshot) in
            //print("Adding place \(placeSnapshot.key)...")

            let labels = placeSnapshot.childSnapshot(forPath: "placeLabel")

            for (key, label) in labels.value as! [String: String] {
                self.updatePlace(key, label: label)
            }
            let ratings = placeSnapshot.childSnapshot(forPath: "rating")
            for (key, rating) in ratings.value as! [String: Int] {
                self.updatePlace(key, rating: rating)
            }
        })
 }

    private func updatePlace(_ key: String, label: String? = nil, rating: Int? = nil)
    {
        if let label = label {
            loadedLabels[key] = label

        }
        if let rating = rating {
            loadedRatings[key] = rating
        }
        guard let label = loadedLabels[key], let rating = loadedRatings[key] else {
            return
        }
        if let place = Places(name: label, rating: rating) {
            places.append(place)
            placesTableView.reloadData()
        }
    }

}

地方迅速

import UIKit

class Places {

    //MARK: Properties

    var name: String
    var rating: Int

    //MARK:Types

    struct PropertyKey {
        static let name = "name"
        static let rating = "rating"
    }

    //MARK: Initialization

    init?(name: String, rating: Int) {
        // Initialize stored properties.
        self.name = name
        self.rating = rating

        // Initialization should fail if there is no name or if the rating is negative.
        // The name must not be empty
        guard !name.isEmpty else {
            return nil
        }

        // The rating must be between 0 and 5 inclusively
        guard (rating >= 0) && (rating <= 5) else {
            return nil
        }

    }

}

据我了解,您希望为您的应用程序提供一个四舍五入的双精度数,而不是双精度数。只需更改你里面的代码loadData()功能,它会为你工作。另外你还会打电话updatePlace()正如你所做的那样。请批准Jay的回答,他写了代码。

private func loadData()
{
    dbRef!.observe(.childAdded, with: {
        (placeSnapshot) in
    let parentRef = self.dbRef?.child(placeSnapshot.key)
    let ratingRef = parentRef?.child("rating")
    ratingRef?.observe(.value, with: { snapshot in
        let count = snapshot.childrenCount
        var total: Double = 0.0
        for child in snapshot.children {
            let snap = child as! FIRDataSnapshot
            let val = snap.value as! Double
            total += val
        }
        let average = total/Double(count)
        print("Average for \(placeSnapshot.key) = \(Int(round(average)))")

        self.updatePlace("" , label: placeSnapshot.key, rating: Int(round(average)))

    })
    })

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

从 firebase 数据库检索计算平均值 的相关文章

  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • iOS 上关键 ClientState 警告的默认访问速度缓慢

    在测试我的 iOS 应用程序时 我收到 对关键 ClientState 的默认访问速度慢 耗时 0 034635 秒 容差为 0 020000 警告 它似乎是间歇性发生的 我试图环顾四周看看它是关于什么的 但我并不完全确定 任何帮助表示赞赏
  • 如何自定义 Firebase 身份验证 ui

    我正在使用 Firebase Auth Ui 进行号码验证 我有一些要求 需要更改国家旋转器下拉项目的文本和背景颜色 我正在使用下面的样式 但它不会改变下拉菜单的背景颜色或项目的文本颜色 style name FirebaseUI Coun
  • 在 Swift 中的 For 循环中更改对象的属性

    我创建了一个名为 ShoppingList 的简单结构 struct ShoppingList var shoppingListId NSNumber var title String var groceryItems GroceryIte
  • gestureRecognizer shouldReceiveTouch 持续存在于已释放的视图中导致崩溃

    我有一个相当简单的 UITableView 它在堆栈上推送一个新视图 新视图有一个像这样初始化的gestureRecognizer synthesize swipeGestureLeft void viewDidLoad swipeGest
  • Grand Central Dispatch (GCD) 调度源标志

    我最近不再使用 to GCD 调度来源 https developer apple com documentation dispatch 1385630 dispatch source create监视文件更改 效果很好 API 也变得更加
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 尝试部署 firebase 函数部署错误:无法配置触发器[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我的云功能可以正常工作 现在我尝试部署云功能 我得到了 Error functions limitTasksPerCreatorF
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • UIScrollView 与 UITabBarController 切断

    我有一个 UIScrollView 我将其放置在视图中 界面生成器文档 xib m h 但是 UIScrollView 的下半部分被剪切 并且由于我有一个 UITabBarController 而没有显示其下半部分 我在 appdelega
  • iOS绘图3D图形库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在搜索一个可以帮助我绘制 3D 图表的库 我想要类似的东西这一页 http www math uri edu bkaskosz fla
  • iOS 有 INTERNET 权限吗?

    我在 iOS 设备上的 flutter dio 包上遇到了一个奇怪的问题 我编写了一个向 url 发送 GET 请求的应用程序 Android 上一切正常 但 iOS 上的请求似乎无法通过 没有发生任何错误 什么也没有 我在 Android
  • Swift 中通过可选绑定进行安全(边界检查)数组查找?

    如果我在 Swift 中有一个数组 并尝试访问超出范围的索引 则会出现一个不足为奇的运行时错误 var str Apple Banana Coconut str 0 Apple str 3 EXC BAD INSTRUCTION 但是 我会
  • Swift 单元测试 - 如何断言 CGColor 是它应该的样子?

    使用 Xcode V7 2 尝试进行单元测试 需要验证是否已设置正确的颜色 并收到以下消息 Cannot invoke XCTAssertEqual with an argument list of type CGColor CGColor
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 获取所有ios应用程序的全局列表[重复]

    这个问题在这里已经有答案了 我想对苹果应用商店进行一些全球统计 一个瓶颈是至少获取所有当前活动应用程序的 ID 这 9 位数字 有谁知道如何获取 iOS 应用商店中当前活动应用程序的所有 id 的完整列表 更好的是特定类别的所有 ID 例如
  • 如何安全地重命名 iOS 分发配置文件?

    我几个小时前刚刚提交了我的第一个应用程序 现在处于 等待审核 状态 但我犯了一个错误 我已经命名了我的分配配置文件My Company Distribution Profile 我应该做的事情被命名为我的发行版配置文件My GAME Dis
  • 我想要有条件的登录导航,没有 MAIN 片段或按钮

    我正在使用 Android Jetpack 导航组件 实时数据和 Firebase 我希望工作流程就像用户打开应用程序时一样 然后根据登录 注销状态导航到登录 配置文件片段 而不需要任何主片段或按钮 请 我的应用程序中没有主要片段 用户启动

随机推荐

  • 使用 xslt 删除 xml 中的重复项

    我需要删除以下 xml 中的重复项
  • 在 C# 中序列化嵌套类?

    我想做的是序列化嵌套类 首先我的代码 Serializable public class SampleClass Serializable public class Person XmlElement Name public string
  • eval():无法分配给函数调用

    我的饼干答题器还有一个问题 这是我编写的产生错误的代码 cps cps bcps buych c c bprice buych eval buych eval buych 1 cps 是一个变量 c 是一个变量 b1 b2 b3 b4 b5
  • 如何从fragment中获取Toolbar?

    I have ActionBarActivity with NavigationDrawer并使用 support v7Toolbar作为动作栏 在我的片段之一中 工具栏有自定义视图 在其他片段中Toolbar应该显示标题 How get
  • ssh-add 创建连接到代理时出错:连接超时 (Windows 10)

    我正在尝试将 ssh 添加到 git 我已经生成了 ssh中有2个文件 在终端 MINGW64 中我输入 eval ssh agent s 它回应 Agent pid 3480 然后我输入 ssh add ssh id rsa 它响应 大约
  • 必须使用活动访问令牌在不同的 url 上查询有关当前用户的信息

    我正在开发托管在测试机上的 Facebook 应用程序 一切都很好 今天我想将其投入生产 我已经更改了 Facebook 开发人员的页面网址 从那一刻起 当我尝试使用此应用程序时 出现错误 An active access token mu
  • 将 NSTextField 的文本重置为空字符串 -- setText: 不起作用

    我有一个NSTextField 我需要一个按钮来重置字段的文本 我该怎么做呢 我一直在尝试这个 textBox setText textbox text 这不起作用 但我研究过 没有发现任何关于如何设置文本的信息 只找到如何获取文本 如果是
  • 如何保存YUV_420_888图像?

    我使用camera2 API 构建了自己的相机应用程序 我从样本开始 相机2Raw 并且我添加了 YUV 420 888 支持而不是 JPEG 但现在我想知道如何将图像保存在 ImageSaver 中 这是我的 run 方法的代码 Over
  • Tkinter - 画布滚动/滚动区域解释 - (非)限制区域

    它被带到我的注意力你不能用例如限制视图scrollregion 0 0 0 0 问题是为什么会这样 由于官方文档表明这应该有效并且不会抛出badRegion error 滚动区域 指定一个具有四个坐标的列表 描述左 上 矩形区域的右坐标和底
  • 从 JSON 字符串获取值

    我有以下 JSON 字符串 d Foo 7 Bar 5 Foobar 3 以及我的js文件中的相应调用 getJSON Foo svc GetSomeFoo function response alert response Foo aler
  • Swift - 发布构建崩溃,除非我关闭优化

    这是 XCode 6 2 上的 如果我在发布模式下运行应用程序 它会崩溃 但关闭优化后它不会崩溃 代码看起来很简单 我已经编程 ObjC 十多年了 所以对编程等并不陌生 我注意到 在 32 位中 它在发布模式 最快 O 下运行良好 但在 6
  • QTableWidgetItem 返回项目类型(pyqt)

    我正在使用 Qt 和 python 以及 pyqt 编写一个 QGIS 插件 在 QtDesigner 中 我有一个 QTableWidget 对象 如果有办法获取列项类型 我真的很挣扎 例如 在下表中 我输入一些用户可以编辑的默认参数 此
  • 如何调试 htaccess 重写脚本

    我想知道如何创建和调试这种脚本 如果您不习惯编写它们 像我一样 那么它可能会变得有点令人头痛 你使用工具来创建它们吗 有什么技巧可以调试正在发生的事情 而不是仅仅创建本地结构并查看浏览器中发生的情况 读者注意 旧答案不再有效 从版本 2 4
  • 在第一个“.”之前获取一个字符串与 PHP

    Lorem Ipsum 只是印刷和排版行业的虚拟文本 from Lorem Ipsum 只是印刷和排版行业的虚拟文本 自 1500 年代以来 Lorem Ipsum 一直是行业标准的虚拟文本 当时一位不知名的印刷商拿走了一堆字体并将其打乱以
  • 从列表中进行互斥随机抽样

    input beleriand mordor hithlum eol morgoth melian thingol 我在创建 X 个大小为 Y 的列表而不重复任何元素时遇到问题 我一直在做的是使用 x 3 y 2 import random
  • 在android上解密php加密数据

    An Android客户端 4 2 1 应用程序通过HttpPost请求给一个PHP 5 6 API 该 API 使用以下方式加密数据AES合规的RIJNDAEL 128 然后使用 OpenSSL 公共加密的客户端公钥对 AES 加密的密钥
  • 如何在 C++ 中使用可以具有多种数据类型的单个变量

    一个变量怎么可以有两种数据类型 如果 月 是一个变量 它应该从 std cin 的输入中获取 我应该怎么做才能让用户输入 January 这样的字符串或输入像 1 这样的整数 在 C 17 中 我们得到了名为 std variant 的东西
  • 如何使用Enquire.Js?

    查询 js是一个为 Javascript 重新创建 CSS 媒体查询的 Javascript 这意味着您可以将 Javascript 封装在媒体查询中 就像您将 CSS 包装在媒体查询中一样 我不太确定如何使用它 本教程说 enquire
  • maven pom.xml如何识别非标准项目结构中的testng测试用例?

    我对 Maven 和 testng 完全陌生 我使用 Maven 作为构建工具 使用 testng 作为测试框架 我没有遵循标准的 Maven 项目结构 现在我想要我的pom xml在我的项目中执行测试用例 问题是 如何pom xml知道执
  • 从 firebase 数据库检索计算平均值

    我正在创建一个 iOS 应用程序 该应用程序使用每个地点的地名和评级 我已经把事情做好了 我的意思是 我将数据保存到数据库中 并且我也可以读取它们 唯一的问题是 当我阅读它们时 我希望它们通过计算每个位置的平均值来加载到我的 tablevi