EPUBKit 0.3.1

EPUBKit 0.3.1

Witek Bobrowski 维护。



 
依赖项
Zip>= 0
AEXML>= 0
 

EPUBKit 0.3.1

Logo

Swift CocoaPods Carthage https://github.com/apple/swift-package-manager Platforms CodacyBadge Travis Contact

📚一个用于解析 EPUB 文档的简单 Swift 库

注意:此库仍处于早期阶段!我将尝试并更改 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)
}

基本上就是这些。现在,例如,您可以将解析后的文档传递给表格视图。

采用这种方法的优点是什么?首先,它是重用解析器对象。使用先前提到的 EPUBDocumentinit(url:) 初始化器,我们避免了每次为每个文档实例化它。现在我们对解析过程本身也有更多了解,我们可以使用 do-catch 语句以标准 Swift 方式检查错误,或使用委托和 parser(:,didFailParsingDocumentAt:,with:) 传递一个错误,如果发生这种情况。最终,我们可以通过在解析过程完成后开始加载封面等方式改进用户体验。

随着库的演变和 API 的不断增强,高级使用此库的可能性将变得越来越实用。

注意:文档尚未准备就绪,但您应该能够轻松探索 API🙃