我们说我有2个课程都需要彼此。
class LoginInteractor {
let userInteractor: UserInteractor
init(userInteractor: UserInteractor) {
self.userInteractor = userInteractor
}
}
class UserInteractor {
let loginInteractor: LoginInteractor
init(loginInteractor: LoginInteractor) {
self.loginInteractor = loginInteractor
}
}
如果我尝试这个(让loginInteractor = LoginInteractor())我会得到循环依赖。我该如何解决这个问题?
答案 0 :(得分:3)
你不能有两个类,其中两个的初始化程序都需要引用另一个。这根本不可能。
您需要更改至少一个类,以使初始化程序不需要另一个。
然后你也有一个问题,即两者都有强烈的引用。这将导致参考周期(一种内存泄漏形式)。因此,除了更改其中一个初始值设定项之外,还应使其中一个引用变弱。
所以最后,你需要像任何其他父子类引用一样制作它。
如果不了解更多信息,我建议您将UserInteractor
更新为不需要LoginInteractor
。您可能有一个用户执行多项操作,登录只是一种可能的情况。
class UserInteractor {
weak var loginInteractor: LoginInteractor?
init() {
}
}
class LoginInteractor {
let userInteractor: UserInteractor {
didSet {
userInterator.loginInteractor = self
}
}
init(userInteractor: UserInteractor) {
self.userInteractor = userInteractor
}
}
通过此设置,您可以创建UserInteractor
的实例。然后,您可以使用LoginInteractor
。
UserInteractor
的实例
let userInteractor = UserInteractor()
let loginIteractor = LoginInteractor(userInteractor: userInteractor)