我正在尝试在UITableView上显示来自Firestore和Google Storage的数据。
我有一个自定义单元格设置,它有自己的类,称为"PriceGuideCell">
在安装了 FirebaseUI/Storage pod 后,我尝试使用 Firebase 网站上显示的方法。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PriceGuideCell
var item = itemData[indexPath.row]
let reference: StorageReference = storageRef.child("test/(item.itemID!).jpg")
cell.nameLabel?.text = item.name
cell.yearLabel?.text = String(item.year)
cell.boxnumLabel?.text = String(item.boxnum)
cell.itemImage?.sd_setImage(with: reference, placeholderImage: #imageLiteral(resourceName: "placeholder"))
}
}
return cell
}
上面的代码给了我一个错误:
Cannot convert value of type 'StorageReference' to expected argument type 'URL'
下面的代码使用(参考(.downloadURL,我已经开始工作了,但我不知道这是否是最佳实践:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PriceGuideCell
var item = itemData[indexPath.row]
let imageURLRef = storageRef.child("test/(item.itemID!).jpg")
imageURLRef.downloadURL { url, error in
if let error = error {
print("There's an error:(error)")
} else {
cell.nameLabel?.text = item.name
cell.yearLabel?.text = String(item.year)
cell.boxnumLabel?.text = String(item.boxnum)
cell.itemImage?.sd_setImage(with: url, placeholderImage: #imageLiteral(resourceName: "placeholder"))
}
}
return cell
}
我还需要安装其他东西才能sd_setImage接受 StorageReference?另外,我的 Podfile 针对 9.0。FirebaseUI 自述文件中有一些关于使用 8.0 的内容。我不知道这是否会影响它,但是对于我的项目使用的其他一些 pod 来说,8.0 太低了。
导入 FirebaseUI 和 SDWebImage 后
import FirebaseUI
import SDWebImage
Firebase 的 StorageReference 将使用以下方法:
UIImageView.sd_setImage(与: 存储引用, 占位符图像:UIImage(
如下所述:
self.imageView.sd_setImage(with: Storage.storage().reference().child(url),
placeholderImage: nil)
你必须在 Podfile 中
pod 'FirebaseUI/Firestore'
pod 'FirebaseUI/Storage'
(或其他组合,如此处所述 https://github.com/firebase/FirebaseUI-iOS(
和!
你必须
use_frameworks!
令人困惑的是,一些Firebase doco(2021(指出您应该避免use_frameworks!
。
但是,FirebaseUI将无法在没有use_frameworks!
的情况下工作。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PriceGuideCell
var item = itemData[indexPath.row]
let referenceImage: StorageReference = storageRef.child("test/(item.itemID!).jpg")
let url = URL(string: referenceImage!)!
cell.nameLabel?.text = item.name
cell.yearLabel?.text = String(item.year)
cell.boxnumLabel?.text = String(item.boxnum)
cell.itemImage?.sd_setImage(with: url, placeholderImage: #imageLiteral(resourceName: "placeholder"))
}
}
return cell
}
不要忘记在类中导入 Firebase StorageUI 框架
import FirebaseStorageUI