Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI—协议类型的值';任何';不能符合';视图';_Swiftui - Fatal编程技术网

SwiftUI—协议类型的值';任何';不能符合';视图';

SwiftUI—协议类型的值';任何';不能符合';视图';,swiftui,Swiftui,我正在尝试将SwiftUI视图数组转换为PDF。我想我差不多有了它,除了一个小问题——数组类型。我无法将视图放入PDFKit可以识别的数组中。在下面的代码中,如果我替换 let tempView = UIHostingController(rootView: view) 与 下面的代码非常有效。但是当我尝试将PageOne()放入类型为Any的数组时,我得到了一个错误,“协议类型'Any'的值不能符合'View';只有struct/enum/class类型可以符合协议”,这是有意义的。但我不明

我正在尝试将SwiftUI视图数组转换为PDF。我想我差不多有了它,除了一个小问题——数组类型。我无法将视图放入PDFKit可以识别的数组中。在下面的代码中,如果我替换

let tempView = UIHostingController(rootView: view)

下面的代码非常有效。但是当我尝试将PageOne()放入类型为
Any
的数组时,我得到了一个错误,
“协议类型'Any'的值不能符合'View';只有struct/enum/class类型可以符合协议”
,这是有意义的。但我不明白我该怎么做

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")
}

您需要使用
AnyView
而不是
Any

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

成功了!不过我很好奇——我试图使用(PageOne()as!AnyView)将我的视图转换到AnyView,结果应用程序崩溃了。区别是什么?@squarehippo10这是因为它只是另一个
视图
PageOne
不符合
AnyView
(但要查看)。
var viewsToConvert = [AnyView]()
viewsToConvert.append(AnyView(PageOne()))
viewsToConvert.append(AnyView(PageTwo()))