mapView中firebase的下载地址

Download address from firebase in mapView

正在尝试从 firebase 上传地址并post它在 mapView 上。但由于某种原因,该地址不想卸载。由 firebase 示例中的字符串拼出的地址 - Moscow, Street so-and-so, house 1。没有加载数据的原因可能是什么?

var allAddresses: String = ""

addressRef = Database.database().reference(withPath: "Address")

addressRef.observe(.value, with: { (snapshot) in

        let value = snapshot.value as! NSDictionary

        self.allAddresses = value["address"] as? String ?? ""
    })
}

Firebase:

{
  «Address» : {
    «AddressOne» : {
      "address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94",
    },
    "AddressTwo» : {
      "address" : "Москва, ул. Правды д.24 строение 3",
    },
    "AddressThree» : {
      "address" : "Москва,ул.Электрозаводская д.21",
    }
  }
}

使用可选的展开并在某些行上设置断点以查看您的代码在哪些地方没有按您的要求执行:

var allAddresses: String = ""

addressRef.observe(.value, with: { (snapshot) in

        if let value = snapshot.value as? [String:Any] {
            if let address = value["address"] as? String {
                self.allAddresses =  address
            } else {
                print("no address in value")
            }
        } else {
            print("no value from firebase")
        }
    })
}

您还应该在 swift 中使用 swift 类型,这是一个很好的做法。

您正在将值观察器附加到 /Address,这意味着您将获得包含该位置所有数据的快照。由于有多个子地址,您的代码将需要处理这些地址。

最简单的方法是监听 .childAdded 而不是 .value:

var allAddresses: String = ""

addressRef = Database.database().reference(withPath: "Address")

addressRef.observe(.childAdded, with: { (snapshot) in

    let value = snapshot.value as! NSDictionary

    self.allAddresses = value["address"] as? String ?? ""
})

现在您的代码会被每个单独的地址触发。

你也可以坚持观察.value,然后循环遍历快照中的结果:

var allAddresses: String = ""

addressRef = Database.database().reference(withPath: "Address")

addressRef.observe(.value, with: { (snapshot) in
    for address in snapshot.children.allObjects as [FIRDataSnapshot] {
        let value = address.value as! NSDictionary

        self.allAddresses = value["address"] as? String ?? ""
    })
})