Swift 代理未调用协议方法

Swift protocol method is not being called by the delegate

出于某种原因,在主视图控制器中未调用委托方法。我在这里寻找其他答案,但没有一个对我有帮助。我在这里错过了什么吗? (为了简单起见,我缩短了原始代码)

主视图控制器:

class VC: ParserDelegate {
    var dataSource = Parser()

    override func viewDidLoad() {
        super.viewDidLoad()

        dataSource.delegate = self
        dataSourse.loadAndParse()
    }

    func didReceiveDataUpdates(store: [WeatherModel]) {
        print("Delegate method triggered.")
    }

}

协议:

protocol ParserDelegate: class {
    func didReceiveDataUpdates(store: [WeatherModel])
}

我的代表class:

class Parser {
    weak var delegate: ParserDelegate?

    func loadAndParse() {
        var store = [WeatherModel]()
        // Doing something

        delegate?.didReceiveDataUpdates(store: store)
    }
}

此处正确应用了委托模式,但这里可能会出错:在您的主视图控制器中,您正在实例化一个新的解析器对象并将其存储在“dataSource”中:

var dataSource = Parser()

并且在将主视图控制器设置为其委托时

dataSource.delegate = self

您的主视图控制器收到通知,作为您刚创建的这个新实例的委托。这意味着:如果您的 Parser() class 的一个实例跳入(向调试器确认,如果确实如此)

loadAndParse()

它可能是另一个对象,因此这个解析器对象没有实际的委托。如果这是这里的问题,您可能会考虑和出口,以便能够直接与这个特定的 Parser() class 对话。希望这有帮助。

您还可以编辑此行:

来自:

dataSource.delegate = self
dataSourse.loadAndParse()

至:

dataSource.delegate = self
dataSource.loadAndParse()