【发布时间】:2020-02-28 15:26:37
【问题描述】:
我用 Swift 制作了一个游戏,但我需要在我的网站上下载 .zip 文件,并在游戏中使用内容(图像)。 实际上,我下载了 .zip 文件并将其存储在文档中,我需要将文件解压缩到同一个文档文件夹中。
我尝试了 marmelroy 的 Zip、iOS 9 压缩模块和 tidwall 的 DeflateSwift,但这些都不起作用。如果能兼容 iOS 8 就更好了。
【问题讨论】:
我用 Swift 制作了一个游戏,但我需要在我的网站上下载 .zip 文件,并在游戏中使用内容(图像)。 实际上,我下载了 .zip 文件并将其存储在文档中,我需要将文件解压缩到同一个文档文件夹中。
我尝试了 marmelroy 的 Zip、iOS 9 压缩模块和 tidwall 的 DeflateSwift,但这些都不起作用。如果能兼容 iOS 8 就更好了。
【问题讨论】:
我最近发布了一个 Swift 原生框架,允许您创建、读取和更新 ZIP 存档文件:ZIP Foundation。
它在内部使用 libcompression 以获得出色的压缩性能。
解压文件基本上只有一行代码:
try fileManager.unzipItem(at: sourceURL, to: destinationURL)
具有某些上下文的完整示例如下所示:
let fileManager = FileManager()
let currentWorkingPath = fileManager.currentDirectoryPath
var sourceURL = URL(fileURLWithPath: currentWorkingPath)
sourceURL.appendPathComponent("archive.zip")
var destinationURL = URL(fileURLWithPath: currentWorkingPath)
destinationURL.appendPathComponent("directory")
do {
try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
try fileManager.unzipItem(at: sourceURL, to: destinationURL)
} catch {
print("Extraction of ZIP archive failed with error:\(error)")
}
README on GitHub 包含更多信息。所有公共方法还通过 Xcode 快速帮助提供完整的文档。
我还写了一篇关于性能特征的博文here。
【讨论】:
unzipItem() 似乎不可用
我刚刚找到名为Minizip 的以下库。试试看
您可以使用Zip framework 使用Swift 解压缩您的文件。简单写在Swift
示例代码
do {
let filePath = NSBundle.mainBundle().URLForResource("file", withExtension: "zip")!
let unzipDirectory = try Zip.quickUnzipFile(filePath) // Unzip
let zipFilePath = try Zip.quickZipFiles([filePath], fileName: "archive") // Zip
}
catch {
print("Something went wrong")
}
如果不适用于 minizip,您可以使用 ZipArchive,它不是用 swift 编写的,而是用 Objective-C 编写的
【讨论】:
我让它与 SSZipArchive 和桥接头一起工作:
【讨论】:
重要提示:需要第三方库
使用此library,您可以使用此行:
let unzipDirectory= try Zip.quickUnzipFile(filePath) //to unZip your folder.
如果您需要更多帮助,请查看存储库。
【讨论】: