如何使数组包含PDF文档

问题描述 投票:1回答:1

我是swift的新手,并试图找出如何编码我的数组以包含PDF文档。我设置了一个tableView,就像单击一个单元格时将移动到一个新的细节视图控制器。我希望新的细节控制器显示与所选单元格关联的PDF。有没有一种智能的方法来编码?

我一直在努力研究如何编写这部分代码。

import Foundation
import UIKit
import PDFKit

class State
{
    var title: String
    var detailText: String
    var description: String
    var image: UIImage

    var document: PDFDocument

    init(titled: String, detailText: String, imageName: String, description: String, document: String)
    {
        self.title = titled
        self.detailText = detailText
        self.description = description

        self.document = PDFDocument

        if let img = UIImage(named: imageName){
            image = img
        } else {
            image = UIImage(named: "default")!
        }
    }
}

我试图让代码将“文档”识别为PDF文档,但是我收到错误:无法指定“PDF Document.Type”类型的值来键入“PDFDocument”我哪里出错了?

ios arrays swift if-statement
1个回答
1
投票

错误的原因是您尝试将类型(PDFDocument)分配给self.document而不是传递给init - document的参数。此外,参数的类型必须是PDFDocument,而不是String

import Foundation
import UIKit
import PDFKit

class State
{
    var title: String
    var detailText: String
    var description: String
    var image: UIImage

    var document: PDFDocument

    init(titled: String, detailText: String, imageName: String, description: String, document: PDFDocument)
    {
        self.title = titled
        self.detailText = detailText
        self.description = description

        self.document = document

        if let img = UIImage(named: imageName){
            image = img
        } else {
            image = UIImage(named: "default")!
        }
    }
}

除非你因为某些其他原因需要State成为一个类,否则我建议将它作为一个结构 - 这给出了隐含的不变性。您还可以使用nil合并运算符简化if语句

import Foundation
import UIKit
import PDFKit

struct State
{
    var title: String
    var detailText: String
    var description: String
    var image: UIImage
    var document: PDFDocument

    init(titled: String, detailText: String, imageName: String, description: String, document: PDFDocument)
    {
        self.title = titled
        self.detailText = detailText
        self.description = description

        self.document = document
        self.image = UIImage(named: imageName) ?? UIImage(named: "default")!
    }
}

好,

看来你的实际问题是“如何从我的应用程序包中获取PDFDocument?”。

你可以使用这样的东西:

if let path = Bundle.main.path(forResource: "SomePdfFile", ofType: "pdf") {
      do {
          let fileUrl = URL(fileURLWithPath: path)
          if let pdfDocument = PDFDocument(url:fileURL) {
              // Do something with PDFDocument
          }
      } catch {
          print("There was an error - \(error)")
      }
}

你可以把它变成一个函数:

func loadPDF(named: String) throws -> PDFDocument? {
    guard let path = Bundle.main.path(forResource: "SomePdfFile", ofType: "pdf") else {
        return nil
   }

   let fileUrl = URL(fileURLWithPath: path)
   return PDFDocument(url:fileURL)
}
© www.soinside.com 2019 - 2024. All rights reserved.