ios - 委托(delegate)和回调不适用于传递模型数据

标签 ios swift callback delegates

我正在尝试将数据从第一个 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/

相关文章:

ios - 常量 'spacesLeft' 被推断为类型 '()' ,这可能是 Swift 意想不到的

ios - 快速在 Google map 中自定义标记

swift - 你需要在 Swift 中释放 CGContextRef 吗?

jquery - 如何将回调附加到对话框显示的 jquery 效果?

csv - 如何在结构回调中使用外部对象,例如将数据附加到 CSV 时?

ios - 为什么有时变量在 block 中变为 NULL

ios - 隐藏快速从不同文件中删除 subview

ios - 将内容左对齐 - SwiftUI iOS 14 Widget

ios - 如何使用 Swift 回调闭包在 Controller 、检查器之间传递数据

iphone - 错误实例方法-initwithFrame :imageName:imgname not found Objective-C