Swift-我可以实现对类的相互泛型引用吗?
我想要两个绑定的类。这意味着,两个类都知道彼此的方法Swift-我可以实现对类的相互泛型引用吗?,swift,generics,nested-generics,Swift,Generics,Nested Generics,我想要两个绑定的类。这意味着,两个类都知道彼此的方法 BaseController <> BaseView 因此,我: class LoginController : BaseController<LoginView> 类登录控制器:BaseController 这是可行的,控制器可以直接访问视图函数(可见性),我不需要每次都强制转换 但是我不能在视图上做同样的事情,因为如果我做了 class BaseView <T : BaseController&g
BaseController <> BaseView
因此,我:
class LoginController : BaseController<LoginView>
类登录控制器:BaseController
这是可行的,控制器可以直接访问视图函数(可见性),我不需要每次都强制转换
但是我不能在视图上做同样的事情,因为如果我做了
class BaseView <T : BaseController>
类基本视图
然后,编译器强制我这样做
class BaseView <T : BaseController <BaseScreen>>
类基本视图
这会导致递归错误
有没有一种方法可以使用泛型进行交叉引用?现在我坚持认为只要在需要时将视图强制转换到控制器上即可。您可以使用协议和相关类型而不是基类(并在协议扩展中实现基类的方法): 实现其中一个协议的类必须为所需的相关类指定typealias:
class LoginController: ControllerProtocol {
typealias View = LoginView
var view: LoginView
...
}
class LoginView: ViewProtocol {
typealias Controller = LoginController
weak var controller: LoginController
...
}
伟大的我仍然需要超类,因为它有一些方法实现,但我认为我也可以使用协议。你也可以使用基类,只对特定类型的东西使用协议。
class BaseView <T : BaseController <BaseScreen>>
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
...
}