符合协议的类型变量
问题描述:
我有符合协议的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
。
答
你需要(在协议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
}
这应该工作,你告诉的结构是视图模型应该是一些类实现视图模型协议
正是我需要的。非常感谢! –
欢迎您!乐意效劳 –