注意:此库仍处于早期阶段!我将尝试并更改 API,直到我对结果满意。我不建议在大型项目中使用此库,尽管非常欢迎反馈
安装
CocoaPods
将以下内容添加到您的 Podfile
pod 'EPUBKit', '~> 0.3.1'
Carthage
将其添加到 Cartfile
github "witekbobrowski/EPUBKit" ~> 0.3.1
Swift 包管理器
将其添加到 Package.swift
.Package(url: "https://github.com/witekbobrowski/EPUBKit.git", from: "0.3.1")
使用方法
基本
只需在 Swift 文件中导入 EPUBKit 即可。
import EPUBKit
使用您 EPUB 文档的 URL
初始化文档实例。
guard
let path = Bundle.main.url(forResource: "steve_jobs", withExtension: "epub"),
let document = EPUBDocument(url: path)
else { return }
如果文档解析正确,您可以访问完整文档元数据、内容等。
print(document.title)
> Steve Jobs
print(document.author)
> Walter Isaacson
高级
假设我们正在开发一个针对 iOS
的应用程序,并有一个处理 EPUB 文档的视图控制器,例如显示列表。
首先,您可以在视图中控制器中添加这两个属性(记得导入库)。
let parser: EPUBParser
let urls: [URL]
var documents: [EPUBDocument] = []
然后,通过初始化时注入依赖关系,通过依赖注入向 VC 提供缺失的属性。
init(parser: EPUBParser, urls: [URL]) {
self.parser = parser
self.urls = urls
super.init(nibName: nil, bundle: nil)
}
然后,当视图加载完成后,我们可以将自身设置为解析器的代理(在扩展视控制器作为 EPUBParserDelegate
协议之前,否则我们会遇到错误)。
parser.delegate = self
并迭代 URL 数组,希望能正确解析每个文档并将其追加到之前定义的数组中。
urls.forEach { url in
guard let document = try? parser.parse(documentAt: url) else { return }
documents.append(document)
}
基本上就是这些。现在,例如,您可以将解析后的文档传递给表格视图。
采用这种方法的优点是什么?首先,它是重用解析器对象。使用先前提到的 EPUBDocument
的 init(url:)
初始化器,我们避免了每次为每个文档实例化它。现在我们对解析过程本身也有更多了解,我们可以使用 do-catch
语句以标准 Swift 方式检查错误,或使用委托和 parser(:,didFailParsingDocumentAt:,with:)
传递一个错误,如果发生这种情况。最终,我们可以通过在解析过程完成后开始加载封面等方式改进用户体验。
随着库的演变和 API 的不断增强,高级使用此库的可能性将变得越来越实用。
注意:文档尚未准备就绪,但您应该能够轻松探索 API