ios - 模型类 Swift 中的完成处理程序
问题描述
我将 MVC 用于我的 Firebase 应用。现在在 Model 类中,我想展示一个 TableView,其中包含从 Firebase 检索到的数据。每个单元格都有一个图像。现在的问题是我找不到让图像显示在表格视图中的方法。下载图像在后端,我找不到显示它的方法。
class List {
let ref:DatabaseReference?
var name : String
var title : String
var subtitle : String
var time : String
var puretime : Any
var indexOfSelf : String
lazy var photo : UIImage = UIImage()
init(name: String, title: String, subtitle: String, time: String, puretime: Any, indexOfSelf: String, photo: UIImage) {
self.ref = nil
self.name = name
self.title = title
self.subtitle = subtitle
self.time = time
self.puretime = puretime
self.indexOfSelf = indexOfSelf
self.photo = photo
}
typealias CompletionHandler = (_ success:Bool) -> Void
init?(snapshot: DataSnapshot)
{
guard
let value = snapshot.value as? [String: AnyObject],
let url = value["0"] as? String,
let name = value["name"] as? String,
let title = value["title"] as? String,
let subtitle = value["subtitle"] as? String,
let time = value["time"] as? String,
let puretime = value["puretime"] as? Any,
let indexOfSelf = value["indexOfSelf"] as? String
else{
return nil
}
self.ref = snapshot.ref
self.name = name
self.title = title
self.subtitle = subtitle
self.time = time
self.puretime = puretime
self.indexOfSelf = indexOfSelf
var image = UIImage()
}
var image = UIImage()
func getImage(url:String, completionHandler: @escaping CompletionHandler) {
print("Doing something!")
let storageRef = Storage.storage().reference(forURL: url)
storageRef.getData(maxSize: 1 * 2084 * 2084)
{ data, error in
if let error = error {
print("error from downloading image is \(error)")
} else {
self.image = UIImage(data: data!)!
let flag = true
completionHandler(flag)
}
}
}
func toAnyObject() -> Any{
return [
"name": name,
"title": title,
"subtitle": subtitle,
"time": time,
"puretime": puretime,
"indexOfSelf": indexOfSelf,
"photo": photo
]
}
}
除图像外,其他所有实体都在工作。我不确定如何在我的情况下使用完成。所以有人可以给我一些建议吗?非常感谢
解决方案
创建一个服务类并添加如下方法(我还建议将 List 创建为结构,而不是类。)
class YourServiceClass {
func getItemList(completion: @escaping (Array< List >?,Error?)-> Void)
{
//call your get service and inside you service response
//check for all your validation here is a success then
let listElms = arrayOfItems.compactMap(List.init)
completion(listElms,nil)
}
}
现在从您的 viewController 或 viewModel 调用getItemList。
推荐阅读
- jenkins - 访问主动选择反应参考参数内的全局映射变量
- excel - 从 Excel 表中读取给出了错误的值
- node.js - 如何使用 Mongoose.populate - 它不起作用
- android - 如何在jetpack compose中删除文本基线下方的空格?
- arrays - 有没有办法将字符串数组转换为集合?我正在尝试使用 set 类中的 symmetricDifference 函数,但它不起作用
- github - GitHub / GitLab 合并请求和下一次提交
- android - Flutter - 通过应用程序使用蓝牙连接两台设备,无需先配对
- c# - 具有索引的并行 foreach 总和
- firebase - 在颤振中,将文件上传到firebase存储后,如何获取公共URL?
- react-native - ImagePicker.showImagePicker 不是函数