Создать блок завершения, который ничего не возвращает, но выполняет другую функцию после завершения?

Я пытаюсь создать блок завершения, который может выполнять другую функцию после ее завершения, в данном случае это перезагрузка таблицы. Я получаю сообщение об ошибке:

'async' производит '()', а не ожидаемый тип контекстуального результата '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()
  }
})

person SwiftyJD    schedule 10.03.2017    source источник
comment
вы определяете блок completion как () -> Bool Зачем вы это делаете, если не хотите возвращать Bool? Кроме того, вы никогда не используете функцию completion в теле appendAllData.   -  person njzk2    schedule 10.03.2017
comment
Я поставил Bool, потому что я не хочу, чтобы он что-то возвращал, просто чтобы перезагрузить табличное представление после завершения функции   -  person SwiftyJD    schedule 10.03.2017
comment
Нет абсолютно никакой причины проверять nil перед условной привязкой имени переменной. Весь смысл условной привязки к проверке nil   -  person Alexander    schedule 10.03.2017
comment
Я немного подчистил это дерьмо: pastebin.com/f3Vgsmpk   -  person Alexander    schedule 10.03.2017
comment
@ Александр, это намного чище, спасибо   -  person SwiftyJD    schedule 10.03.2017
comment
@SwiftyJD Могу я спросить, зачем вам все эти параллельные массивы? Это огромный запах кода   -  person Alexander    schedule 10.03.2017
comment
@Alexander, это для 'numberOfRowsInSection', каждый массив представляет строку   -  person SwiftyJD    schedule 10.03.2017
comment
@SwiftyJD Вероятно, лучше просто использовать карту/фильтр для создания этих массивов, когда это необходимо.   -  person Alexander    schedule 10.03.2017
comment
@Александр, я не совсем уверен, как сделать что-то подобное   -  person SwiftyJD    schedule 10.03.2017
comment
Вы должны найти руководство по map, filter и reduce. Они делают вашу жизнь намного проще.   -  person Alexander    schedule 10.03.2017


Ответы (1)


Ваша подпись закрытия завершения — completion: () -> Bool, но вы использовали () -> (). Просто измените параметр функции с completion: () -> Bool на completion: () -> Void или completion: () -> (). И вы должны следовать комментарию njzk2.

person Leo    schedule 10.03.2017
comment
Это ничто :) - person Leo; 10.03.2017