Причина ошибки заключается в том, что вы пытаетесь присвоить тип (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
, чтобы быть классом по какой-то другой причине, я бы предложил сделать его структурой - это дает неявную неизменность. Вы также можете упростить этот оператор if
, используя оператор объединения nil
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)
}