2016-03-03 100 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

欢迎您!乐意效劳 –

相关问题