我正在尝试创建一些具有类似属性的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

10-06 02:43