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