2016-02-14 121 views
0

代碼符合一個協議協議相關聯的類型

我有以下協議:

protocol BaseViewController { 
    typealias ViewModelType: BaseViewModel 

    var viewModel: ViewModelType? { get set } 
} 

protocol BaseViewModel { 
} 

我也有一個視圖模型的以下協議:

protocol MainViewModel: BaseViewModel { 
} 

然後在我的MainViewController中:

class MainViewController: UIViewController, BaseViewController { 
    typealias ViewModelType = MainViewModel 

    var viewModel: ViewModelType? 

    ... 
} 

錯誤

在MainViewController我得到的錯誤

Type 'MainViewController' does not conform to protocol 'BaseViewController'

下面這兩個相關的錯誤:

  1. 在BaseViewController:

Unable to infer associated type 'ViewModelType' for protocol 'BaseViewController'

  • 在MainViewController上視圖模型屬性
  • Inferred type 'BaseViewModel' (by matching requirement 'viewModel') is invalid: does not conform to 'BaseViewModel'

    所需的結果

    我想ViewModelType的值限制到符合協議BaseViewModel。如果這可以以另一種方式完成,那麼這將回答我的問題。但我想知道我在這裏做錯了什麼。

    回答

    0

    我認爲你需要一個協議的具體實現BaseViewModel所以定義MainViewModel作爲一個結構或類將工作。

    0

    爲typealias文檔指示它具有以下格式:

    typealias賦值→=類型

    type定義爲:

    型→陣列類型字典型函數類型類型標識符 元組類型可選類型隱式解包可選類型 協議的組合物型元類型型

    protocol-composition-type定義爲:

    協議的組合物型→協議<協議標識符listopt>

    所以列出了協議似乎不被支持,所以目前還不清楚爲什麼你沒有收到編譯錯誤。如果將其更改爲該格式,似乎工作(編譯但我沒有測試你得到想要的結果):

    protocol BaseViewController { 
        typealias ViewModelType = protocol<BaseViewModel> 
    
        var viewModel: ViewModelType? { get set } 
    } 
    

    和:

    class ViewController: UIViewController, BaseViewController { 
        typealias ViewModelType = protocol<MainViewModel> 
    
    相關問題