【问题标题】:Append Firebase data to an array using queryEqualToValue in Swift在 Swift 中使用 queryEqualToValue 将 Firebase 数据附加到数组中
【发布时间】:2017-01-16 20:39:25
【问题描述】:

我有一个关于Append Firebase data to an array in Swift ios 的问题。当我对超链接中给出的数据使用queryEqualToValue 运行此代码时,它给出了queryCount 拥有的元素数量。但是,我想将所有元素放入一个数组中。

例如,当我运行kısıt(3) 时,我想在Sesgrup = 3 的情况下获取所有HHtype 值。并且,将这些元素存储在一个数组中。你能帮我解决这个问题吗?

我有如下数据:

{
  "1400001" : {
    "HHtype" : 3,
    "Sesgrup" : 4,
    "lg_Et harcaması" : 0,
    "lg_Total Harcama" : 3.11
  },
  "1400002" : {
    "HHtype" : 1,
    "Sesgrup" : 4,
    "lg_Et harcaması" : 1.2,
    "lg_Total Harcama" : 3.15
  },
  "1400004" : {
    "HHtype" : 3,
    "Sesgrup" : 4,
    "lg_Et harcaması" : 1.18,
    "lg_Total Harcama" : 3.06
  },
  "1400005" : {
    "HHtype" : 4,
    "Sesgrup" : 3,
    "lg_Et harcaması" : 2.21,
    "lg_Total Harcama" : 3.74
  },
  ....... (9000unit)

最后一个答案的代码:

func kısıt(sesNotoSet: UInt){

    var rootRef: FIRDatabaseReference!
    var haneRef: FIRDatabaseReference!
    var numbersArray = [Int] ()

    self.sesNo = sesNotoSet



    rootRef = FIRDatabase.database().reference()
    haneRef = rootRef.child("SES2014")

    var queryCount : UInt = sesNotoSet
    haneRef.queryOrderedByChild("Sesgrup").queryEqualToValue(queryCount).observeEventType(.ChildAdded, withBlock: { (snapshot) in
        print(snapshot)

        if let HHtypeDict = snapshot.value! as? [String:AnyObject]{
            for each in HHtypeDict{
                numbersArray.append(each.1["HHtype"] as! Int)
            }

            queryCount -= 1
            if queryCount <= 0 {
                print(numbersArray)
            }


        }

    })



}

给定的错误:fatal error: unexpectedly found nil while unwrapping an Optional valueprint(snapshot) 仅是:

Snap (1400005) {
    HHtype = 4;
    Sesgrup = 3;
    "lg_Et harcamas\U0131" = "2.21";
    "lg_Total Harcama" = "3.74";
}

不过,快照应该有 425 个这样的元素

【问题讨论】:

  • 这非常令人困惑“当我对超链接中给出的数据使用 queryEqualToValue 运行此代码时,它给出了 queryCount 的元素数。但是,我想将所有元素放入一个数组中。你能帮我解决这个问题。”举个例子支持一下!!!
  • 感谢您的反馈。我更新了它
  • 基本上你只是像你正在做的那样抓取快照变量。 for (var item in snapshot) { print(item) } 这可能有帮助,也可能没有帮助。值得尝试完成块返回的内容。
  • 你现在得到的结果是什么...?

标签: ios arrays swift firebase firebase-realtime-database


【解决方案1】:

试试这个:-

  func kısıt(sesNotoSet: UInt){

    var rootRef: FIRDatabaseReference!
    var haneRef: FIRDatabaseReference!
    var numbersArray = [Int] ()

    self.sesNo = sesNotoSet



    rootRef = FIRDatabase.database().reference()
    haneRef = rootRef.child("SES2014")

    var queryCount : UInt = sesNotoSet
    haneRef.queryOrderedByChild("Sesgrup").queryEqualToValue(queryCount).observeEventType(.ChildAdded, withBlock: { (snapshot) in


        if let HHtypeDict = snapshot.value! as? [String:AnyObject]{
           for each in HHtypeDict{
           numbersArray.append(each.1["HHtype"] as! Int)
              }

        queryCount -= 1
        if queryCount <= 0 {
            print(numbersArray)
        }

      }

    })



}

【讨论】:

  • 代码 "numbersArray.append(each["HHtype"] as! Int 上存在错误(Type '(String, AnyObject)' has no subscript members for each["HHtype"]) )"
  • 我已经更新了我的答案,但是用你的firebase DB JSON树结构更新你的问题......否则我可以帮助你..
  • 还打印您在observeEventType 块中收到的快照并将其粘贴到您上面的 Q 中。问题不在 cmets 中..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2017-07-18
  • 1970-01-01
相关资源
最近更新 更多