如何将通用视图传递给 SwiftUI 中的结构

Posted

技术标签:

【中文标题】如何将通用视图传递给 SwiftUI 中的结构【英文标题】:How to pass generic views to a struct in SwiftUI 【发布时间】:2020-10-08 12:11:50 【问题描述】:

我收到以下代码的错误Failed to produce diagnostic for expression; please file a bug report。在我看来这很简单,但可能与泛型有关。如何将通用视图传递给结构?

在 SwiftUI 视图中,我有这个:

import SwiftUI

struct PageView<Page: View>: View 
    var views: [UIHostingController<Page>]

    init(_ views: [Page]) 
        self.views = views.map  UIHostingController(rootView: $0) 
    

    var body: some View 
        Text("Page View")
    


struct View1: View 
    var body: some View 
        Text("View 1")
    


struct View2: View 
    var body: some View 
        Text("View 2")
    


struct Reference: View 
    var body: some View              // <- Error here
        PageView([View1(), View2()])
    

【问题讨论】:

这是因为您的PageView 需要一个泛型类型Page 的视图数组。但是,在您的代码中,您传递了两种 不同的 类型:View1 和 View2。 顺便说一句,这可能会帮助你:How can I implement PageView in SwiftUI? @pawello2222 是的,但是我怎么知道“接受一个对象数组,每个对象都实现视图”? 您可以像下面的解决方案一样使用AnyView 另见:How to have a dynamic List of Views using SwiftUI 【参考方案1】:

这是可能的解决方案

struct Reference: View 
    var body: some View              
        PageView([AnyView(View1()), AnyView(View2())])
    

【讨论】:

以上是关于如何将通用视图传递给 SwiftUI 中的结构的主要内容,如果未能解决你的问题,请参考以下文章

如何将可选视图传递给 SwiftUI 中的另一个视图?

将多个子视图传递给 SwiftUI 中的视图

将计时器传递给 SwiftUI 中的子视图

如何将 swiftUI 的图像传递给 UIImage? [关闭]

SwiftUI 将@Published viewmodel 对象值传递给@Binding

SwiftUI - 按钮 - 如何将函数请求传递给父级