代码之家  ›  专栏  ›  技术社区  ›  L'lynn

使用Swift从Firebase中的子数据的子数据中获取键的特定值

  •  0
  • L'lynn  · 技术社区  · 9 年前

    你好,我有一个这样的数据模型;

    {
      "users" : {
        "User1" : {
          "flat1" : {
            "flataddress" : "adres1",
            "flatname" : "n1"
          },
          "flat2" : {
            "flataddress" : "adress2",
            "flatname" : "n2"
          }
        },
        "user2" : {
          "flat3" : {
            "flataddress" : "a3",
            "flatname" : "n1"
          },
          "flat4" : {
            "flataddress" : "a6",
            "flatname" : "a6"
          }
        }
      }
    }
    

    假设user1、user2、flat1、flat2是一些类似“3DSAZDSAPOYDZ”的ID。 第一个问题是,我如何获得flataddress=“adres1”的所有单位?

    第二个问题是,如果我需要检索所有公寓,则存在无法猜测的ID,如果我使用ref.getChild(“用户”),则从快照中检索用户ID;

           {
      "users" : {
        "User1" : {
          "flat1" : {
            "flataddress" : "adres1",
            "flatname" : "n1"
          },
          "flat2" : {
            "flataddress" : "adress2",
            "flatname" : "n2"
          }
        },
        "user2" : {
          "flat3" : {
            "flataddress" : "a3",
            "flatname" : "n1"
          },
          "flat4" : {
            "flataddress" : "a6",
            "flatname" : "a6"
          }
        }
      }
    }
    

    已经包含了用户ID,我想要这样的东西;

    {

                flat1 =         {
                    flataddress = adres1;
                    flatname = n1;
                }
                flat2 =         {
                    flataddress = adress2;
                    flatname = n2;
                }
    
    
                flat3 =         {
                    flataddress = a3;
                    flatname = n1;
                }
                flat4 =         {
                    flataddress = a6;
                    flatname = a6;
                }
    
        }
    

    提前谢谢。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Kayla Galway    9 年前

    jsonDict .如果你想进入每一本词典,你可以:

    //make an empty array to put your dictionaries in
    var flatsDictArray = [[String: AnyObject]]()
    
    //first you have to unwrap each level of the dictionary response
    guard let usersDict = jsonDict["users"] as? [String: AnyObject] else {
      //do something here if your json response is not what you expected
      //print usersDict below if you want to see what it looks like
      print(usersDict)
      return
    }
    
    //below we access the keys and values in the usersDict
    //obj is the key, value is the value
    for (obj, value) in usersDict {
      if let userFlats = value as? [String: AnyObject] {
        flatsDictArray.append(userFlats)
      }
    }
    

    因此,flatsDictArray将是:

    ["flat1": [flataddress: adres1,
               flatname: n1],
     "flat2": [flataddress: adress2,
               flatname: n2]],
    ["flat3": [flataddress: a3,
               flatname: n1],
     "flat4": [flataddress: a6,
               flatname = a6]]
    

    正如你所看到的,你可以像我一样在字典的每一个层次上找到一个键或值,所以如果你需要找到一个等于某个值的值,你可以用同样的方法。

    for(obj, value) in myLovelyDictionary {
      if value == "address1" {
      //do something
      }
    }