ios - 创建一个不返回任何内容但在完成时执行另一个函数的完成 block ?

标签 ios swift completionhandler completion-block

我正在尝试创建一个完成 block ,该完成 block 可以在完成后执行另一个函数,在本例中它是 TableView 重新加载。我收到错误:

'async' produces '()', not the expected contextual result type 'Bool'

这是函数:

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

    if self.movieDetailsData?.poster != nil {
      if let posterImage = self.movieDetailsData?.poster {
        self.posterArray.append(posterImage)
      }
    }
    if self.movieDetailsData?.overview != nil {
      if let overview = self.movieDetailsData?.overview {
        self.overviewArray.append(overview)
      }
    }

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

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

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

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

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

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

    if self.movieDetailsData?.images != nil {
      if let images = self.movieDetailsData?.images {

        let posters = images.backdropImages
        for poster in posters {

          self.imageArray.append(poster.filePath)
        }
      }
    }
  }

使用方法如下:

 self.appendAllData(completion: { _ in

  DispatchQueue.main.async { //error here: 'async' produces '()', not the expected contextual result type 'Bool'
    self.detailTableView.reloadData()
  }
})

最佳答案

您的完成闭包签名是 completion: () -> Bool 但您使用了 () -> ()。只需将函数参数从 completion: () -> Bool 更改为 completion: () -> Voidcompletion: () -> () 。 你应该关注njzk2的评论。

关于ios - 创建一个不返回任何内容但在完成时执行另一个函数的完成 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42710414/

相关文章:

iphone - CocoaPods 的团队合作问题

iphone - 使用 webrequest 和 uialertview 在 MonoTouch 中线程化

ios - 自定义对象下载管理器

swift - Firebase 存储完成处理程序未调用

macos - 如何快速根据用户输入运行警报

swift - 为调用异步方法的异步调度队列实现完成处理程序

ios - 检查名称的 NSMutableArray 是否具有多个字符的前缀

ios - 究竟什么时候从 urlcache 的内存和磁盘中删除内容?

ios - Swift - 如何从相机胶卷中获取视频并将其显示在 UICollectionView 中?

ios - 检查 Parse 数据库以查看输入的文本是否与字符串匹配时出错