重构的转义闭包未给出预期值

  • 本文关键字:转义 闭包 重构 ios swift
  • 更新时间 :
  • 英文 :


我开始学习MVVM和API数据获取,所以我制作了以下代码:

函数newDirector,其中directorName值用提取的数据进行修改:

func newDirector(id: Int, completed: @escaping () -> ()){
homeRepository.getDirector(id: id){ (creditReponse) -> (Void) in
self.directorName = ""
creditReponse?.crew.forEach({ singleValue in
if singleValue.knownForDepartment == .directing {
self.directorName = singleValue.name

}
})
completed()
}
}

函数getDirector,用于从Internet获取数据:

func getDirector(id:Int, _ completed: @escaping (CreditsResponse?) -> (Void)) {
movieServiceAPI.fetchData(from: NetworkData.directorUrl(id: id).value, by: completed)
}

函数loadDirector,其中调用newDirector,它是ViewModel函数。

func loadDirector(id: Int){
newDirector(id: id, completed: {

})

}

函数loadDirector在VC:中的表视图函数中调用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let movie = homeViewModel.movieList[indexPath.row]
homeViewModel.loadDirector(id: movie.id)
self.changeVC(movie: movie, director: (self.homeViewModel.directorName), groups: self.homeViewModel.setupGenres(groups: movie.genreIds), movieIndex: indexPath.row)
}

首先是homeViewModel.loadDirector(id:movie.id,completed:(,在completed闭包中调用了changeVC,但我想重构loadDirector只有一个参数的代码。当我在第一个单元格上执行此代码时,点击directorName值为"在第二个单元格上单击directorName具有上次单击的值。我知道这是因为changeVC是在数据提取完成之前调用的,但我不知道要更改loadDirector完成闭包,所以它工作得很好。

由于loadDirector方法是异步的,您需要将completion块参数也添加到该方法中,并在该完成块内调用self.changeVC

最新更新