2016-03-03 130 views
0

我有符合協議的struct。該協議指定了需要符合另一協議的變量。在我的struct中,我想使用符合所需協議的特定類型來聲明該變量。符合協議的類型變量

的代碼,這應該讓很多更加清晰:

protocol ViewModel { 
    var isActive: Bool { get } 
} 

struct TestViewModel: ViewModel { 
    var isActive = false 
} 


protocol View { 
    var viewModel: ViewModel { get } 
} 

struct TestView: View { 
    var viewModel: TestViewModel 
} 

使用上面的代碼,我會得到一個編譯錯誤說類型TestView不符合協議View。因爲TestViewModel符合ViewModel,我會預料到這樣可以,但顯然不是。

有什麼辦法可以做我想做的事嗎?在我的TestView中使用它時,我需要將viewModel類型轉換爲TestViewModel

回答

2

你需要(在協議typealias)泛型工作

protocol ViewModel { 
    var isActive: Bool { get } 
} 

struct TestViewModel: ViewModel { 
    var isActive = false 
} 

protocol View { 
    typealias V: ViewModel 
    var viewModel: V { get } 
} 

struct TestView: View { 
    var viewModel: TestViewModel 
} 

這應該工作,你告訴的結構是視圖模型應該是一些類實現視圖模型協議

+0

正是我需要的。非常感謝! –

+0

歡迎您!樂意效勞 –

相關問題