ios - 永远不会调用完成 block ?

标签 ios swift completionhandler completion-block

我们有一个函数,当它完成时,应该在它的完成 block 中调用另一个函数,但永远不会调用完成 block 中的任何内容。这是函数:

func appendAllData (completion: () -> Void) {

    guard let movieDetails = self.movieDetailsData else {
      // handle nil case
      return;
    }

    if let posterImage = self.movieDetailsData?.poster {
      self.posterArray.append(posterImage)
    }

    if let overview = self.movieDetailsData?.overview {
      self.overviewArray.append(overview)
    }

    if let releaseDate = self.movieDetailsData?.releaseData {
      self.releaseInfoArray.append(releaseDate)
    }

    if let runtime = self.movieDetailsData?.runtime {
      self.releaseInfoArray.append(String(describing: runtime))
    }

    if let genre = self.movieDetailsData?.genre {
      if !genre.isEmpty {
        self.releaseInfoArray.append(genre[0].name)
      }
    }

    if let budget = self.movieDetailsData?.budget {
      self.boxOfficeArray.append(budget)
    }

    if let revenue = self.movieDetailsData?.revenue {
      self.boxOfficeArray.append(revenue)
    }

    if let homepage = self.movieDetailsData?.homepage {
      self.homePageArray.append(homepage)
    }

    if let images = self.movieDetailsData?.images {
      self.imageArray += images.backdropImages.map{ $0.filePath }
    }
  }

这是它的用法:

self.appendAllData(completion: { _ in
//Nothing inside here gets called
  DispatchQueue.main.async {

    print(self.movieDetailsData?.poster )

    if let bgImage = self.movieDetailsData?.poster {
      self.backgroundImage.sd_setImage(with: URL(string:"\(baseImageURL)\(bgImage)"))
      print("background pic loaded")
      self.backgroundImage.addBlurEffect()
    }

    self.detailTableView.reloadData()
  }
})

完成 block 中没有任何内容被调用,知道如何解决这个问题吗?

最佳答案

我相信你需要在最后调用 completion() 来执行你的完成代码。

func appendAllData (completion: () -> Void) {

    guard let movieDetails = self.movieDetailsData else {
      // handle nil case
      return;
    }

    if let posterImage = self.movieDetailsData?.poster {
      self.posterArray.append(posterImage)
    }

    if let overview = self.movieDetailsData?.overview {
      self.overviewArray.append(overview)
    }

    if let releaseDate = self.movieDetailsData?.releaseData {
      self.releaseInfoArray.append(releaseDate)
    }

    if let runtime = self.movieDetailsData?.runtime {
      self.releaseInfoArray.append(String(describing: runtime))
    }

    if let genre = self.movieDetailsData?.genre {
      if !genre.isEmpty {
        self.releaseInfoArray.append(genre[0].name)
      }
    }

    if let budget = self.movieDetailsData?.budget {
      self.boxOfficeArray.append(budget)
    }

    if let revenue = self.movieDetailsData?.revenue {
      self.boxOfficeArray.append(revenue)
    }

    if let homepage = self.movieDetailsData?.homepage {
      self.homePageArray.append(homepage)
    }

    if let images = self.movieDetailsData?.images {
      self.imageArray += images.backdropImages.map{ $0.filePath }
    }

    completion()
  }

关于ios - 永远不会调用完成 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725036/

相关文章:

arrays - Swift 3 获取照片图像的 PHImageFileURLKey

swift - 在 Alamofire Swift 2.2 中使用 completionHandler

ios - 通过我的 ios 应用程序与 UIActivityViewController 共享文件

ios - UIButton 状态转换动画不适用于 setEnabled 或 setHighlighted

ios - iOS 是否提供了一个 api 来让 UITextField 在收到短信时自动填充

objective-c - 如何将 Objective C View Controller 推送到 Swift View Controller

ios - 如何设置按钮滚动到下一个表格 View 行?

ios - 在 Xcode 中连接开关时出现问题?

ios - 在 Swift 中刷新 UITableView

swift - 复杂流程的大中央调度?