如何从 Firebase 存储中查看 PDF - SwiftUI PDFVIEW

How to view PDF from Firebase Storage - SwiftUI PDFVIEW

我在尝试在我的 SwiftUI 应用程序中显示存储在 Firebase 存储中的 PDF 时遇到一些问题。

我已成功完成以下操作;

目前出现了 PDFKITVIEW,但没有显示任何内容,也没有错误。我错过了什么?

显示 PDFKITVIEW

.sheet(isPresented: $isShowingDoc) {
    PDFKitView(path: model.object.docURL) // Path to firebase storage is correct 
}

PDFKITVIEW

import SwiftUI
import PDFKit

struct PDFKitView : UIViewRepresentable {
    
    private var url: URL?
    
    init(path: String) {
        
        // Get url from path
        let dm = DataManager()
        url = dm.urlForDocPath(path: path)
    }
    
    func makeUIView(context: Context) -> UIView {
        let pdfView = PDFView()

        if let url = url {
            pdfView.document = PDFDocument(url: url)
        }
        
        return pdfView
    }
    
    func updateUIView(_ uiView: UIView, context: Context) {
        // Empty
    }
    
}

DataManager

func getURLFromFirestore(path: String, success:@escaping (_ docURL:URL)->(),failure:@escaping (_ error:Error)->()){
    
    let storage = Storage.storage().reference(withPath: path)
     storage.downloadURL { (url, error) in
         if let _error = error{
             print(_error)
             failure(_error)
         } else {
             if let docURL = url {
                 success(docURL)
             }
         }
     }
}

func urlForDocPath(path: String) -> URL? {
    var url: URL?
    
    getURLFromFirestore(path: path,  success: { (docURL) in
        url = docURL
    }) { (error) in
        print(error)
    }
    
    return url
}

我不能 post 这作为评论,因为我没有足够的声誉来这样做,但似乎问题可能出在你的 urlForDocPath 函数中,它试图执行异步操作但同步返回。

你能检查 PDFKitView 上的 url 是否不为 nil 吗?因为如果是的话,就证明了我的观点。

尚未在 Xcode 中尝试过,但需要类似于以下内容:

func urlForDocPath(path: String, success: @escaping (_ docURL:URL?)->(), failure: @escaping (_ error:Error)->()) {
    var url: URL?

    getURLFromFirestore(path: path,  success: { (docURL) in
        success(docURL)
    }) { (error) in
        failure(error)
    }
}