首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将“UIHostingController<AnyView>”类型的值转换为闭包结果类型“UIHostingController<Page>”

无法将“UIHostingController<AnyView>”类型的值转换为闭包结果类型“UIHostingController<Page>”
EN

Stack Overflow用户
提问于 2020-06-09 20:45:22
回答 1查看 733关注 0票数 1

根据PageView教程,我正在用SwiftUI制作一个与UIKit的交互实现。

特别是有这样的守则:

代码语言:javascript
复制
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)
  }
}  

可以简单地调用视图:

代码语言:javascript
复制
PageView([FirstView(), SecondView()])

我想在页面视图周围做一个很好的填充,所以我可以以以下方式调用这个视图:

代码语言:javascript
复制
PageView([AnyView(FirstView().padding()), AnyView(SecondView().padding()])

这一切都很好,但每次.padding()都必须重复,并在调用方方法中包装在AnyView中。但是,当我试图将这段代码移动到init方法时,我陷入了错误,我无法绕开:

代码语言:javascript
复制
  init(_ views: [Page]) {
      self.viewControllers = views.map { UIHostingController(rootView: AnyView($0.padding())) }
  }

报告为不能将'UIHostingController‘类型的值转换为闭包结果类型'UIHostingController'

有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 04:36:39

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

代码语言:javascript
复制
  var body: some View {
    PageViewController(controllers: viewControllers, currentPage: $currentPage)
        .padding()     // << here !!
  }

但是,如果要在AnyView中使用init,则将成员的声明更改为

代码语言:javascript
复制
  var viewControllers: [UIHostingController<AnyView>]    // << here !!
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62291546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档