【问题标题】:Completion handler in Model class Swift模型类 Swift 中的完成处理程序
【发布时间】:2019-04-11 14:01:07
【问题描述】:

我将 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
        ]
    }
}

除图像外,其他所有实体都在工作。我不确定如何在我的情况下使用完成。所以有人可以给我一些建议吗? 非常感谢

【问题讨论】:

  • 不要这样做。添加一个服务处理程序类,该类具有带有 completionHandler(List) 的方法,您可以从该类中获取控制器或 viewModel 中所有图像的数组。

标签: ios swift firebase


【解决方案1】:

创建一个服务类并添加如下方法(我还建议将 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

【讨论】:

  • 您好,感谢您的评论。但是我还有一个问题,我在哪里将图像返回到列表中?如果我不初始化 init 中的所有变量,它会抱怨,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多