【发布时间】:2020-03-20 01:44:27
【问题描述】:
我有这个具有完成处理程序的 getData 通用网络调用:
func getData<K: Codable>(dataType : DataType, result: (Result<[K]>) -> Void) {
networkManager.request(route: dataType) { (results:Result<[K]>) in
switch results {
case .success:
switch dataType {
case .users: self.networkDelegate.didLoadUserData()
case .albums: self.networkDelegate.didLoadAlbumsData()
case .comments: self.networkDelegate.didLoadCommentsData()
case .photos: self.networkDelegate.didLoadPhotosData()
case .posts: self.networkDelegate.didLoadPostData()
case .todos: self.networkDelegate.didLoadTodosData()
}
case .error(let error): self.networkDelegate.onError(error: error)
}
}
}
这是对该方法的调用:
router.getData(dataType: DataType.albums) { (result:Result<[PostModel]>) in
//receives results but there is nothing to handle as the data is being sent via delegates
}
我不想在 router.getData() 中有一个完成处理程序,因为我想使用委托来通知我的控制器有关数据的下载状态。
所以我做了同样的方法(getData),但没有完成处理程序,签名看起来像这样:
func getData<K:Codable>(dataType : DataType, result: Result<[K]>) {
networkManager.request(route: dataType) { (results:Result<[K]>) in
//here the delegates would call back my controller with the data
}
}
唯一的区别是现在可以在没有任何完成处理程序块的情况下完成调用,所以现在理想情况下我应该可以这样调用它:
router.callToData(dataType: DataType.albums, result: (Result<[PostModel]>))
但我有一个错误:
Cannot convert value of type '(Result<[PostModel]>).Type' to expected argument type 'Result<[_]>'
我正在尝试一切,但我找不到解决方案。有人可以帮忙吗?
【问题讨论】: