我正在尝试将数据从第一个 VC 传递到第二个 VC 我试过使用委托(delegate)但它从来没有工作过(没有显示所需的响应)所以我也尝试了回调并且它现在可以工作所以我粘贴了两行代码欢迎任何帮助
委托(delegate):
protocol RatingDelegate: class {
func didLoadRating(ratings : [RatingModel])
}
从中传递数据的 View Controller
View Controller A:
var delegate : RatingDelegate?
func showRatings(ratings: [RatingModel]) {
if delegate != nil {
delegate?.didLoadRating(ratings: ratings)
}
}
应该打印委托(delegate)值的地方
评级VC:
extension RatingVC: RatingDelegate {
func didLoadRating(ratings: [RatingModel]) {
log(ratings)
}
}
回调版本
获取数据的 View Controller
var ratingsCallBack: (() -> ([RatingModel]))?
传递值的 View Controller
func showRatings(ratings: [RatingModel]) {
let ratingVC = RatingVC()
ratingVC.ratingsCallBack!() = {[unowned self] in
return ratings
}
}
这怎么会抛出一个回应说
Expression is not assignable: function call returns immutable value
最佳答案
因此 FirstVC 将数据传递给 RatingVC。
在 FirstVC 上,当您调用 RatingVC 时,您应该分配委托(delegate)。
let ratingVC = RatingVC()
self.delegate = ratingVC //Here you specify RatingVC is the delegate variable
self.present(ratingVC, animated: true)
还有
if delegate != nil {
}
是不必要的,只需执行 delegate?.didLoadRating(ratings: ratings)
以保持清洁
编辑:对于相同的回调版本,只需在初始化发送数据的 View Controller 之前将值分配给回调即可。
关于ios - 委托(delegate)和回调不适用于传递模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430124/