我想要绑定两个类。这意味着,两个类都知道彼此的方法。
BaseController <> BaseView
这些类用于声明子类,例如
LoginController <> LoginView.
BaseController
强烈提及其对<T : BaseView>
种类的看法,BaseView
应该对其类型的控制器<T: BaseController>
我设法使用BaseView的通用:
class BaseController <T: BaseScreen>
所以我这样做:
class LoginController : BaseController<LoginView>
有效且控制器可以直接访问(可见性)视图功能,我不需要每次都进行转换。
但是我不能在View上做同样的事情,因为如果我这样做
class BaseView <T : BaseController>
然后编译器强迫我做
class BaseView <T : BaseController <BaseScreen>>
导致递归错误。
有没有办法可以使用泛型进行交叉引用?现在我正在坚持视图,只需在需要的时候转向控制器。
答案 0 :(得分:1)
您可以使用协议和关联类型而不是基类(并在协议扩展中实现基类型的方法):
protocol ControllerProtocol: class {
associatedtype View: ViewProtocol
var view: View { get }
}
protocol ViewProtocol: class {
associatedtype Controller: ControllerProtocol
weak var controller: Controller { get }
}
实现其中一个协议的类必须为所需的相关类指定一个类型:
class LoginController: ControllerProtocol {
typealias View = LoginView
var view: LoginView
...
}
class LoginView: ViewProtocol {
typealias Controller = LoginController
weak var controller: LoginController
...
}