协议“视图”只能用作通用约束,因为它具有 Self 或关联类型要求

Sgt*_*ike 4 ios swift swiftui

我正在尝试将目标视图结构传递给另一个视图,但代码无法编译。

我想传入一些符合视图协议的结构,因此它可以用于导航按钮目的地,但我似乎无法编译它。我也尝试将目的地类型设置为 _View。任何建议都非常感谢。

struct AnimatingCard : View {

    var title, subtitle : String
    var color : Color
    var destination : View

    init(title : String, subtitle: String, color: Color, destination : View){
        self.title = title
        self.subtitle = subtitle
        self.color = color
        self.destination = destination


    }

    var body: some View {
        NavigationButton(destination: destination) {
    ...
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

Jum*_*hyn 9

如果没有所有视图使用的通用具体类型destination,您应该使用AnyView结构来获取类型擦除的具体View符合对象。

预计到达时间:

AnyView有一个声明为的初始化程序init<V>(_ view: V) where V : View,所以无论你在哪里创建你AnimatingCard之前你现在应该写:

AnimatingCard(title: title, subtitle: subtitle, color: color, destination: AnyView(view))
Run Code Online (Sandbox Code Playgroud)

或者,您可以使AnimatingCard所有View符合类型的初始化器通用,并AnyView在初始化器中进行转换,如下所示:

init<V>(title : String, subtitle: String, color: Color, destination : V) where V: View {
    self.title = title
    self.subtitle = subtitle
    self.color = color
    self.destination = AnyView(destination)
}
Run Code Online (Sandbox Code Playgroud)