委托未调用 Swift 协议方法



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

主视图控制器:

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 Parser {
weak var delegate: ParserDelegate?
func loadAndParse() {
var store = [WeatherModel]()
// Doing something
delegate?.didReceiveDataUpdates(store: store)
}
}

委托模式在这里被正确应用,但这里有一件事可能会出错:在你的主视图控制器中,你正在实例化一个新的解析器对象,并将其存储在"数据源"中:

var dataSource = Parser()

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

dataSource.delegate = self

您的主视图控制器将作为您刚刚创建的这个新实例的委托收到通知。这意味着:如果你的 Parser(( 类的实例跳入(使用调试器保证,如果它确实如此(

loadAndParse()

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

您还可以编辑此行:

从:

dataSource.delegate = self
dataSourse.loadAndParse()

自:

dataSource.delegate = self
dataSource.loadAndParse()

最新更新