如何将通用视图传递给 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 的图像传递给 UIImage? [关闭]