我是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”我哪里出错了?
错误的原因是您尝试将类型(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)
}