How to get this example to work?

Hello there, I am trying to follow along with the video and copy the example shown here in SwiftUI. I am given the error Cannot assign value of type 'UIView' to type 'PKCanvasView?' on this line: resultView = overlayView

It is totally possible that I am botching the whole thing up but I would appreciate it if someone looked over my code. Thanks.

code:

//  ContentView.swift


import SwiftUI
import PDFKit
import PencilKit
import Foundation
import UIKit

struct PDFUIView: View {
    
    let pdfDoc: PDFDocument
    let pdfView: PDFView
    

    
    init() {
        let url = Bundle.main.url(forResource: "example", withExtension: "pdf")!
        pdfDoc = PDFDocument(url: url)!
        pdfView = PDFView()
        
    }
    
    var body: some View {
        VStack {
            
            PDFKitView(showing: pdfDoc, pdfView: pdfView)
           
        }
        .padding()
    }
}







#Preview {
    PDFUIView()
}

    
    struct PDFKitView: UIViewRepresentable {
        
        let pdfDocument: PDFDocument
        let pdfView: PDFView
        init(showing pdfDoc: PDFDocument, pdfView:PDFView) {
            self.pdfDocument = pdfDoc
            self.pdfView = pdfView
        }
        
        
        func makeUIView(context: Context) -> PDFView {
            
           
            pdfView.usePageViewController(true)
            pdfView.autoScales = true
            pdfView.pageOverlayViewProvider = context.coordinator
            pdfView.displayMode = .singlePageContinuous
            pdfView.isUserInteractionEnabled = true
            pdfView.document = pdfDocument
            pdfView.delegate = context.coordinator
            return pdfView
        }
        
        func updateUIView(_ pdfView: PDFView, context: Context) {
            pdfView.document = pdfDocument
        }
        func makeCoordinator() -> Coordinator {
          Coordinator()
        }
        
        
       
    }
    
    
    
    
    class Coordinator: NSObject, PDFPageOverlayViewProvider, PDFViewDelegate {
        
        var pageToViewMapping = [PDFPage: UIView]()
        
        func pdfView(_ view: PDFView, overlayViewFor page: PDFPage) -> UIView? {
            var resultView: PKCanvasView? = nil
            
            if let overlayView = pageToViewMapping[page] {
            
                resultView = overlayView
                
            } else {

                var canvasView = PKCanvasView(frame: .zero)
           
                canvasView.drawingPolicy = .anyInput
                canvasView.tool = PKInkingTool(.pen, color: .systemCyan, width: 20)
                canvasView.backgroundColor = UIColor.clear

                pageToViewMapping[page] = canvasView
                resultView = canvasView
                
            }

            let page = page as! MyPDFPage
            if let drawing = page.drawing {
                resultView?.drawing = drawing
            }

            return resultView
            
        }
        
        func pdfView(_ pdfView: PDFView, willDisplayOverlayView overlayView: UIView, for page: PDFPage) {
            guard let overlayView = overlayView as? PKCanvasView else {
                    return
                }
                guard let canvasView = pageToViewMapping[page] else {
                    return
                }
            
            let page = page as! MyPDFPage
            page.drawing = overlayView.drawing
            pageToViewMapping.removeValue(forKey: page)
            
        }
        
        class MyPDFAnnotation: PDFAnnotation {
            
            override func draw(with box: PDFDisplayBox, in context: CGContext) {
                UIGraphicsPushContext(context)
                context.saveGState()
                
                let page = self.page as! MyPDFPage
                if let drawing = page.drawing {
                    let image = drawing.image(from: drawing.bounds, scale: 1)
                    image.draw(in: drawing.bounds)
                }
                context.restoreGState()
                UIGraphicsPopContext()
            }
        
        }
        class MyPDFPage: PDFPage {
            var drawing: PKDrawing?
        }
    }

                
          

Replies

Did you try:

            if let overlayView = pageToViewMapping[page] as? PKCanvasView {