SwiftUI-协议类型“任何”的值不符合“视图”

时间:2020-10-26 20:28:24

标签: swiftui

我正在尝试将一系列SwiftUI视图转换为PDF。除了一个小问题-数组类型之外,我想我几乎可以拥有它。我无法将视图放入PDFKit可以识别的数组中。在下面的代码中,如果我替换

let tempView = UIHostingController(rootView: view)

使用

let tempView = UIHostingController(rootView: PageOne())   

下面的代码效果很好。但是,当我尝试将PageOne()放入类型为Any的数组中时,出现了错误"Value of protocol type 'Any' cannot conform to 'View'; only struct/enum/class types can conform to protocols",这是有道理的。但是我没有得到的是我应该怎么做。

var viewsToConvert = [Any]()
viewsToConvert.append(PageOne())
viewsToConvert.append(PageTwo())

let pdfData = NSMutableData()
let pdfPageFrame = CGRect(x: 0, y: 0, width: width, height: height)
UIGraphicsBeginPDFContextToData(pdfData, pdfPageFrame, nil)
let graphicsContext = UIGraphicsGetCurrentContext()
for view in viewsToConvert {
   let tempView = UIHostingController(rootView: view)
   tempView.view.frame = CGRect(x: 0, y: 0, width: width, height: height)
            
   UIGraphicsBeginPDFPage()
   tempView.view.layer.render(in: graphicsContext!)
            
   tempView.removeFromParent()
   tempView.view.removeFromSuperview()
}
UIGraphicsEndPDFContext()

return saveViewPdf(data: pdfData, fileName: "Quote")
}

1 个答案:

答案 0 :(得分:1)

您需要使用AnyView而不是Any

var viewsToConvert = [AnyView]()
viewsToConvert.append(AnyView(PageOne()))
viewsToConvert.append(AnyView(PageTwo()))