无法将类型“UIHostingController<AnyView>”的值转换为关闭结果类型“UIHostingController<Page>”
Posted
技术标签:
【中文标题】无法将类型“UIHostingController<AnyView>”的值转换为关闭结果类型“UIHostingController<Page>”【英文标题】:Cannot convert value of type 'UIHostingController<AnyView>' to closure result type 'UIHostingController<Page>' 【发布时间】:2020-06-09 20:45:22 【问题描述】:我正在根据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】:可能最简单的方法是添加填充
var body: some View
PageViewController(controllers: viewControllers, currentPage: $currentPage)
.padding() // << here !!
但如果您想在init
中创建那些AnyView
s,则将成员声明更改为
var viewControllers: [UIHostingController<AnyView>] // << here !!
【讨论】:
谢谢,@Asperi,第一个解决方案不起作用,因为我想在 PageControl 中的各个视图之间有填充,因此滚动将显示页面之间的分隔符。然而,第二个 - 作品。我现在真的很困惑,因为我确定我尝试过但没有成功,还有另一个编译消息,可能是 XCode 重新启动有帮助,或者其他什么。以上是关于无法将类型“UIHostingController<AnyView>”的值转换为关闭结果类型“UIHostingController<Page>”的主要内容,如果未能解决你的问题,请参考以下文章
SnapKit snp 无法分配给 UIHostingController
在构建 iOS 应用程序时获取在范围错误中找不到类型“UIHostingController”
将变量从 UIHostingController 传递到 SWIFTUI 视图
嵌入在 UIViewController 中的 UIHostingController - 如何从外部更新 @State?
为啥 SwiftUI UIHostingController 有额外的间距?
为啥在 SwiftUI Lifecycle 中将 rootViewController 设置为 UIHostingController 时会出错?