2017-09-07 53 views
1

對不起,如果這不是一個具體的問題,但你能提出一些方法來解決泛型參數循環依賴?Swift泛型:參數循環依賴分辨率

我有兩種類型:

typealias RiskListPresenter = ListPresenter<RiskListViewController, ...> // <View: ListViewType (generic protocol)> 

typealias RiskListViewController = SectionedListViewController<RiskListPresenter, ...> // <Presenter: ListPresenterType (generic protocol), ...> 

的事情是,演示者需要知道的視圖類型調用方法來填充它,並在視圖控制器需要知道主持人的類型進行實例化。

我試過一個依賴注入庫浸,但我無法注入一個泛型類型。也許還有其他一些技巧?

回答

0

所以我解決了這個問題,通過刪除保存實際類型的必要性,用非泛型協議代替它。

所以,

ListViewController我抱着presenter作爲其他的非通用protocol ListViewPresenterType,可我從它想在這裏只能做。

ListViewController中的泛型方法啓動它作爲所需的泛型類型,使其符合具有所有必要約束條件的泛型協議。

func configure<Presenter: ListPresenterType>(..., presenterType: Presenter.Type, ...) where <all the necessary constraints> 
{ 
    presenter = Presenter(dispatcher: dispatcher, view: self as! Presenter.View) 
    ... 
} 

做的是,我能夠從泛型參數刪除PresenterListViewController

有點破解,但解決了我的問題,無論如何我需要這個configure(...)方法。

不過,這不是一個真正的通用解決方案。