【问题标题】:Decompress a zip file with Swift使用 Swift 解压缩 zip 文件
【发布时间】:2020-02-28 15:26:37
【问题描述】:

我用 Swift 制作了一个游戏,但我需要在我的网站上下载 .zip 文件,并在游戏中使用内容(图像)。 实际上,我下载了 .zip 文件并将其存储在文档中,我需要将文件解压缩到同一个文档文件夹中。

我尝试了 marmelroy 的 Zip、iOS 9 压缩模块和 tidwall 的 DeflateSwift,但这些都不起作用。如果能兼容 iOS 8 就更好了。

【问题讨论】:

    标签: ios swift zip


    【解决方案1】:

    我最近发布了一个 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

    【讨论】:

    【解决方案2】:

    我刚刚找到名为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 编写的

    【讨论】:

    • 是的,这是我第一次尝试,我尝试时找不到 minizip 模块
    • 你可以使用ZipArchive,据我所知目前没有其他可用的框架
    • 使用SSZipArchive,找不到同名的类。
    • 尝试第一个,MiniZip我已经更新了我的答案
    • 如果我在我的项目中拖放 minizip 和 vendor 文件夹,它在我的 Swift 代码中找不到 Minizip 模块。我没有迦太基。
    【解决方案3】:

    我让它与 SSZipArchive 和桥接头一起工作:

    1. 在您的项目中拖放 SSZipArchive 目录
    2. 使用 import "SSZipArchive.h" 行创建一个 {PROJECT-MODULE-NAME}-Bridging-Header.h 文件
    3. 在 Build Settings 中,在 Swift Compiler - Code generation -> Objective-C Bridging Header 中拖动桥接头。
    4. 在您的 Swift 代码中使用 SSZipArchive。

    【讨论】:

    • 5.在收到上述 4 个步骤的一系列链接器错误后,将 libz 添加到您的目标。
    【解决方案4】:

    重要提示:需要第三方库

    使用此library,您可以使用此行:

    let unzipDirectory= try Zip.quickUnzipFile(filePath) //to unZip your folder.
    

    如果您需要更多帮助,请查看存储库。

    【讨论】:

    • 这与使用第三方库有关,如果不使用,这段代码会产生编译时错误。我建议建议使用什么库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2023-03-21
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多