[英]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.