Koshub
1
I tried this code in the playground and it doesn't work. What is interesting - the fixed version. I was not expected this.
class SomeController: PresenterListener {
var presenter: Presenter? {
didSet { presenterUpdated() }
}
private func presenterUpdated() {
presenter?.listener = self
}
}
protocol PresenterListener: class {
}
protocol Presenter {
var listener: PresenterListener? { get set }
}
class SomePresenter: Presenter {
weak var listener: PresenterListener?
}
let controller = SomeController()
controller.presenter = SomePresenter()
print("✅")
Nevin
2
Your code has infinite recursion. The line “presenter?.listener = self” causes a mutation of self.presenter, which is modeled as first getting the value then setting it. That means it triggers the didSet handler, which starts the same loop over again endlessly.
1 Like
Koshub
3
Yep, that is recursion. Isn't it looks strange when the working code looks like this?
class SomeController: PresenterListener {
var presenter: Presenter? {
didSet {
presenter?.listener = self
presenterUpdated()
}
}
private func presenterUpdated() {
//...
}
}