热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何将基本数据保存到数组中-HowtosaveFirebaseDataintoanArray

IhaveaFirebasedatabasethatismodeledassuch:我有一个这样建模的Firebase数据库::users:some-random

I have a Firebase database that is modeled as such:

我有一个这样建模的Firebase数据库:

: users
    : some-random-id-1
        - username:"user1"
        - email:"email1@gmail.com"
    : some-random-id-2
        - username:"user2"
        - email:"email2@gmail.com"

I am trying to iterate through all the users in the dictionary of data and append the username into a list in the file to be used for other purposes. I created a string array (userslist) variable and in viewdidload(), I wrote the following code below:

我尝试遍历数据字典中的所有用户,并将用户名附加到文件中的列表中,以便用于其他目的。我创建了一个字符串数组(userslist)变量,在viewdidload()中,我编写了以下代码:

    ref = Database.database().reference()
    ref?.observe(.value, with: { (snapshot) in
        let dataDict = snapshot.value as! NSDictionary
        let x = dataDict["users"] as! NSDictionary
        print(x)
        print("--------")
        for user in x{
            let y = user.value as? [String: String]
            let z = y!["username"]
            print(z)
            self.userslist.append(z!)
            print(self.userslist)
            print("NEXT")
        }
    })
    print(self.userslist)

Inside the brackets of the snapshot, when I print self.userslist, I can see that each element is getting added, but when I print it a final time outside of the brackets, it shows it as an empty array. I think that the elements are only appended in the scope of those brackets so I cant access the filled array anywhere else. How do I get around this so I can use the data I appended?

在快照的括号内,打印self。userslist,我可以看到每个元素都被添加了,但是当我最后一次在括号外打印时,它显示为一个空数组。我认为这些元素只添加在括号的范围内,所以我无法访问填充数组。如何绕过这个,以便使用我添加的数据?

1 个解决方案

#1


1  

you are using print(self.userslist) outside the observer and Firebase run in Async Mode

您正在使用observer之外的print(self.userslist)和在异步模式下运行的Firebase

So, if you make use of breakpoints you will notice that

如果你利用断点,你会注意到

print(self.userslist) is Called before the control reach onside the Database handler ,

在控件到达数据库处理程序之前调用print(self.userslist),

data is getting fetched you need to load your views inside that handler using Dispatch main queue

数据正在获取,您需要使用分派主队列在处理程序中加载视图

    ref?.observe(.value, with: { (snapshot) in
            let dataDict = snapshot.value as! NSDictionary
            let x = dataDict["users"] as! NSDictionary
            print(x)
            print("--------")
            for user in x{
                let y = user.value as? [String: String]
                let z = y!["username"]
                print(z)
                self.userslist.append(z!)
                print(self.userslist)
                print("NEXT")
            }
            /// Here is your data
            print(self.userslist)
        })
 /// Called before Handler execution
 print(self.userslist)

推荐阅读
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • Chapter11&12:DefocusBlur&FinalScene在Camera.h中修改如下:#pragmaonce#define_USE ... [详细]
  • 在Python编程学习过程中,许多初学者常遇到各种功能实现难题。虽然这些问题往往并不复杂,但找到高效解决方案却能显著提升编程效率。本文将介绍一个名为‘30-seconds-of-python’的优质资源,帮助大家快速掌握实用的Python技巧。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
author-avatar
拍友2702932701
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有