我正在尝试创建一些具有类似属性的Swiftui视图。所以我想为他们制作一个协议并显示这个协议的一个实例。
protocol SpecialView: View { ... }
struct SpecialViewA : View, SpecialView {
...
var body: some View {
Text("Hello World!")
}
}
struct ContentView: View {
var currentlyDisplayedView: some SpecialView
var body: some View{
currentlyDisplayedView
}
}
//in preview:
ContentView(SpecialViewA())
我希望ContentView接受我的SpecialView作为SpecialView。但是,在预览中
“无法将类型为”“specialview”“的值转换为所需的参数类型”“some specialview”“。”
当我试图展示时,我得到:
“[…]要求'some specialview'符合'view'”
我做错什么了?有更简单的方法吗?
最佳答案
您很接近,但这将编译:
protocol SpecialView: View {
}
struct SpecialViewA : View, SpecialView {
var body: some View {
Text("Hello World!")
}
}
struct ContentView<V>: View where V: SpecialView {
var currentlyDisplayedView: V
var body: some View{
currentlyDisplayedView
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView(currentlyDisplayedView: SpecialViewA())
}
}
#endif