无法将类型'UIHostingController <AnyView>'的值转换为关闭结果类型'UIHostingController <Page>'

时间:2020-06-09 20:45:22

标签: swiftui

我正在根据Interacing with UIKit教程使用SwiftUI进行PageView实现。

尤其是有这样的代码:

struct PageView<Page: View>: View {
  var viewControllers: [UIHostingController<Page>]
  @State var currentPage = 0

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

  var body: some View {
    PageViewController(controllers: viewControllers, currentPage: $currentPage)
  }
}  

可以通过一种简单的方式调用视图:

PageView([FirstView(), SecondView()])

我想在页面视图周围添加良好的填充,因此可以通过以下方式调用此视图:

PageView([AnyView(FirstView().padding()), AnyView(SecondView().padding()])

一切都很好,但是我每次都要重复.padding()并包装在调用者方法的AnyView中。但是,当我尝试将此代码移至init方法时,我陷入了错误,无法解决:

  init(_ views: [Page]) {
      self.viewControllers = views.map { UIHostingController(rootView: AnyView($0.padding())) }
  }

报告为无法将类型'UIHostingController '的值转换为关闭结果类型'UIHostingController '

有提示如何解决吗?

1 个答案:

答案 0 :(得分:1)

可能最简单的方法是添加填充

  var body: some View {
    PageViewController(controllers: viewControllers, currentPage: $currentPage)
        .padding()     // << here !!
  }

但是如果您想在AnyView中创建那些init,则将成员声明更改为

  var viewControllers: [UIHostingController<AnyView>]    // << here !!