2017-08-31 53 views
0

我想要有两个绑定的类。这意味着,两个类都知道其他方法。Swift - 我可以实现类的相互泛型引用吗?

BaseController <> BaseView 

这些类用于声明子类,例如

LoginController <> LoginView. 

BaseController具有强引用的种类<T : BaseView>其视图,BaseView应该有一个弱引用其的种类<T: BaseController>

控制器

我成功地通过了BaseView:

class BaseController <T: BaseScreen> 

让我做的:

class LoginController : BaseController<LoginView> 

,工程和控制器能够直接访问(能见度)的视图功能,我不需要投的每一次。

但是我不能做同样的观点,因为如果我这样做

class BaseView <T : BaseController> 

那么编译器迫使我做

class BaseView <T : BaseController <BaseScreen>> 

这会导致递归错误。

有没有一种方法可以做到使用泛型进行交叉引用?现在我坚持使用视图来简单地投射到控制器,以防万一需要。

回答

1

可以使用,而不是基类的协议和相关类型(和执行基本类型的在一个协议扩展的方法):

protocol ControllerProtocol: class { 
    associatedtype View: ViewProtocol 
    var view: View { get } 
} 
protocol ViewProtocol: class { 
    associatedtype Controller: ControllerProtocol 
    weak var controller: Controller { get } 
} 

一类实施方案中的一个具有指定typealias到所需的相关等级:

class LoginController: ControllerProtocol { 
    typealias View = LoginView 
    var view: LoginView 
    ... 
} 

class LoginView: ViewProtocol { 
    typealias Controller = LoginController 
    weak var controller: LoginController 
    ... 
} 
+0

太棒了!我仍然需要超类,因为它有一些方法实现,但我认为我也可以协议 – htafoya

+0

您还可以使用基类并仅将该协议用于类型特定的东西。 – Palle