簡體   English   中英

Firebase快速檢索autoId值

[英]Firebase retrieve autoId value in swift

我想檢索圖像值。 節點看起來像這樣,我想檢索url1,url2,url3。

 "Post": {
    "uid": {
      "Text": "some text",
      "images": {
         autoID1: url1,
         autoID2: url2,
         autoID3: url3
      }
    }
  }

問題是密鑰是自動生成的。 所以,我通常是這樣的。

if let dictionary = snapshot.value as? [String:Anyobject] 
let text = dictionary["text"] as? String

但是在這種情況下,我不知道如何投射自動ID鍵並獲取價值。 我在下面嘗試了代碼但是錯誤說

無法將類型'__NSDictionaryM'(0x10af491c8)的值強制轉換為'NSString'(0x10a0bad68)。

 func fetchImages() {
    ref.child("Post").child(uid!).child("images").observe(.value, with: { (snapshot) in

            let downloadUrl = snapshot.value as! String
            let stoRef = Storage.storage().reference(forURL: downloadUrl)

            stoRef.getData(maxSize: 1*1024*1024, completion: { (data, error) in
                let pic = UIImage(data: data!)
                self.imagesArray.append(pic!)
            })

    }, withCancel: nil)
}

另外如果有三個URL,我應該使用像for snap in snapshot.children一樣for snap in snapshot.children中循環嗎? 我應該如何遍歷那些url並放入imagesArray? 先感謝您!

你很親密 要記住的是,當您獲得

.child("images")

它實際上是一個包含子節點的節點

"images": {
   autoID1: url1,
   autoID2: url2,
   autoID3: url3

並且不是字符串,而是另一個鍵:值對,其中鍵為“ images”,值為子節點。

要獲取子節點,請遍歷快照中的子節點,將每個節點轉換為快照(另一個鍵:值對),鍵為autoID1等,其值為url(字符串)

let imagesRef = self.ref.child("Post").child("uid_0").child("images")
imagesRef.observeSingleEvent(of: .value, with: { snapshot in
    for child in snapshot.children {
        let snap = child as! DataSnapshot
        //let key = snap.key  //autoID1, autoID2 etc
        let downloadUrl = snap.value as! String
        let stoRef = Storage.storage().reference(forURL: downloadUrl)
        //get your pic
    }
})

如果ref是您問題中出現的var類,則應將其引用為

self.ref

另外,如果要在節點上保留觀察者,以使您收到有關更改的通知,請使用.observe。 在我的情況下,我只想閱讀一次,所以我使用了observeSingleEvent,因為我只想閱讀一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM