ios - 协议(protocol) 'View' 只能用作通用约束,因为它具有 Self 或关联类型要求

标签 ios swift swiftui

我试图将目标 View 结构传递到另一个 View ,但代码无法编译。

我想传递一些符合 View 协议(protocol)的结构,因此它可以在导航按钮目的地中使用,但我似乎无法编译它。我也尝试将目的地类型设置为 _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) {
    ...
        }
   }
}

最佳答案

如果destination中使用的所有 View 没有共同的具体类型将会是,您应该使用 AnyView struct 以获得类型删除的混凝土 View符合对象。

预计到达时间:

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

AnimatingCard(title: title, subtitle: subtitle, color: color, destination: AnyView(view))

或者,您可以制作 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)
}

关于ios - 协议(protocol) 'View' 只能用作通用约束,因为它具有 Self 或关联类型要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639069/

相关文章:

ios - 快速获取字典中数组的值

SwiftUI Nested NavigationView navigationBar消失

ios - 为更新的应用程序版本更改所有可用的应用程序内购买产品

IOS - XML 解析导致应用程序启动时间较长

ios - Firebase 通知

ios - Xcode UITableView 单元格背景不起作用

swift - 如何使用 SwiftUI 获取 ScrollView 的动态文本高度

ios - 通知 View 在swiftUI中单击警报确定按钮

ios - UISearchBar 使用时从 UINavigationBar 消失 "back swipe"iOS 12

swift - 从一点 Swift 记录 Controller 方法