我正在创建一个iOS应用程序(在Xcode中使用Swift),向用户显示大量的交易卡。卡信息(名称,攻击等)以JSON文件的形式存储在Firebase数据库中。我想在Firebase存储中存储每张卡的图像,但不知道如何以类似于填充的Assets.xcassets文件夹的方式检索它们。
如果可能的话,我想遍历存储中的所有图像,并将每个图像声明为UIImage,以便以后可以通过我的collectionView按名称调用它们并显示。
有没有办法用循环声明数百个变量,每个变量都有一个唯一的变量名?如何将这些变量设置为我在存储中保存的图像?
我从存储中下载的大部分代码都与此类似:
// Create a reference to the file you want to download
let islandRef = storageRef.child("images/island.jpg")
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
islandRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
if (error != nil) {
// Uh-oh, an error occurred!
} else {
// Data for "images/island.jpg" is returned
// ... let islandImage: UIImage! = UIImage(data: data!)
}
}
这只下载一个图像,命名变量“islandImage”。我需要能够为我的firebase数据库中的每个项目执行此操作。
答案 0 :(得分:0)
如果您从firebase获取大量数据,也许您应该考虑使用分页来一次获取一些图像以避免冻结UI。下面我有一个Brian Voong的Instagram火基课程(https://www.letsbuildthatapp.com/course/Instagram-Firebase)的示例函数。
fileprivate func paginatePosts() {
guard let uid = self.user?.uid else {return}
let ref = Database.database().reference().child("posts").child(uid)
var query = ref.queryOrdered(byChild: "creationDate")
if posts.count > 0 {
let value = posts.last?.creationDate.timeIntervalSince1970
query = query.queryEnding(atValue: value)
}
query.queryLimited(toLast: 4).observeSingleEvent(of: .value, with: { (snapshot) in
print("all snapshots: ", snapshot)
guard var allObjects = snapshot.children.allObjects as? [DataSnapshot] else {return}
allObjects.reverse()
if allObjects.count < 4 {
self.isFinishedPaging = true
}
if self.posts.count > 0 && allObjects.count > 0 {
allObjects.removeFirst()
}
guard let user = self.user else {return}
allObjects.forEach({ (snapshot) in
guard let dictionary = snapshot.value as? [String : Any] else {return}
var post = Post(user: user, dictionary: dictionary)
post.id = snapshot.key
self.posts.append(post)
})
self.posts.forEach({ (post) in
})
self.collectionView?.reloadData()
}) { (err) in
print("Failed to paginate for posts:", err)
}
}