【发布时间】:2019-04-04 02:49:59
【问题描述】:
我正在尝试将可选字典中的项目转换为单独的字符串,以便循环遍历它们并将它们转换为 URL。但一直无法这样做。
这是我用来从 firebase 获取图像的函数,它返回这个可选字典,它也包含在下面:
func fetchAllUsersImages() {
print("inside func")
self.ref.child("Posts").child(self.userID).child(self.postNum).observe(.childAdded, with: { snapshot in
print("inside closure")
// print(URL(string: snapshot.value as! String))
// let postSnap = snapshot.childSnapshot(forPath: self.postNum)
// let imageUrlSnap = postSnap.childSnapshot(forPath: "ImageUrl")
print(snapshot.value, "value")
// guard let allImages = imageUrlSnap.children.allObjects as? [DataSnapshot] else { return print("the code failed here")}
guard let allImages = snapshot.value as? [DataSnapshot] else { return print("the code failed here")}
// let snapshotVal = snapshot.value
// let snapshotValValue = snapshotVal as! String
// print(snapshotValValue, "snapshot as string value")
for image in allImages {
print(image, "image")
}
print(snapshot.key, "key")
print(snapshot.value, "value")
print(snapshot.children, "cjildren")
print(allImages)
print()
})
}
snapshot.value 的输出:
Optional({
image1 = "https://firebasestorage.googleapis.com/v0/b/base.appspot.com/o/ijzAnEdyKNbhPsQVH6a8mOa1QpN2%2Fpost1%2Fimage1?alt=media&token=c2f396fd-717d-4192-909a-db390dd23143";
image2 = "https://firebasestorage.googleapis.com/v0/b/atabase.appspot.com/o/ijzAnEdyKNbhPsQVH6a8mOa1QpN2%2Fpost1%2Fimage2?alt=media&token=359b8527-f598-4f9a-934e-079cee21fd15";
})
根据提供的答案,我做了以下操作:
func fetchAllUsersImages() {
print("inside func")
self.ref.child("Posts").child(self.userID).child(self.postNum).observe(.childAdded, with: { snapshot in //error here
var images: [URL] = []
if let snapShotValue = snapshot.value as? [String: String] {
for (_, value) in snapShotValue {
if let imageURL = URL(string: value) {
print(imageURL, "image url here")
let imageAsData = try Data(contentsOf: imageURL)
let image = UIImage(data: imageAsData)
let ImageObject = Image()
ImageObject.image = image
self.arrayOfImgObj.append(ImageObject)
self.tableView.reloadData()
}
}
}
})
}
但是在第三行我得到了
无法在当前上下文中推断闭包类型
编辑:
要解决此错误,请将代码放在代码最深处的 do 块中,并且还要包含一个 catch 块。这将修复错误。
【问题讨论】:
-
你的程序只输出这个吗?
-
No 就此类而言,它还输出:描述:post1 描述:闭包内的 func 内的 ijzAnEdyKNbhPsQVH6a8mOa1QpN2 Optional({ image1 = "firebasestorage.googleas.com/v0/b/database.appspot.com/o/…"; image2 = "firebasestorage.googleapis.com/v0/b/database.appspot.com/o/…"; }) 值代码在这里失败
标签: ios swift firebase firebase-realtime-database