我可以创建一个继承自 'View' 的协议来显示特定的 'View' 吗?

Can I make a protocol that inherits from 'View' to display a specific 'View'?

我正在尝试制作一些具有类似属性的 SwiftUI-View。所以我想为他们做一个协议,并显示这个协议的一个实例。

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 接受我的 SpecialViewA 作为 SpecialView。但是,在预览中我得到 "Cannot convert value of type 'SpecialViewA' to expected argument type '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