• SwiftUI 中如何实现文件导入和导出


    在这里插入图片描述

    前言

    之前谈论了在 SwiftUI 中选择照片和视频的问题。今天我们将学习如何在 SwiftUI 视图中导入和导出文件。通过使用新的 fileImporter 和 fileExporter 视图修饰符,可以很方便实现这个功能。

    导入

    SwiftUI 框架提供了 fileImporter 视图修饰符,可以轻松启用文件选择功能。完全处理对话框和文件夹之间的导航。接下来让我们看看如何实现。

    struct ImportingExampleView: View {
        @State private var importing = false
        
        var body: some View {
            Button("Import") {
                importing = true
            }
            .fileImporter(
                isPresented: $importing,
                allowedContentTypes: [.plainText]
            ) { result in
                switch result {
                case .success(let file):
                    print(file.absoluteString)
                case .failure(let error):
                    print(error.localizedDescription)
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    如上面的示例所示,我们将 fileImporter 视图修饰符附加到一个按钮上,该按钮切换导入属性,使用它作为绑定来启用文件选择功能。还使用 fileImporter 视图修饰符上的 allowedContentTypes 参数传递允许的文件类型数组。在完成闭包中,可以处理结果并提取所选文件的 URL。

    导出

    文件导出的工作方式非常相似,但我们还应该提供要导出的文档。在这种情况下,文档类型应符合 FileDocument 协议。

    struct TextDocument: FileDocument {
        static var readableContentTypes: [UTType] {
            [.plainText]
        }
        
        var text = ""
        
        init(text: String) {
            self.text = text
        }
        
        init(configuration: ReadConfiguration) throws {
            if let data = configuration.file.regularFileContents {
                text = String(decoding: data, as: UTF8.self)
            } else {
                text = ""
            }
        }
        
        func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
            FileWrapper(regularFileWithContents: Data(text.utf8))
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上面的示例中,我们定义了符合 FileDocument 协议的 TextDocument 类型。正如示例所见,实现了从文件读取纯文本并允许将字符串数据导出到文件。现在,可以使用 fileExporter 视图修饰符导出 TextDocument 类型的实例。

    struct ExportingExampleView: View {
        @State private var exporting = false
        @State private var document = TextDocument(text: "")
        
        var body: some View {
            TextEditor(text: $document.text)
                .toolbar {
                    Button("Export") {
                        exporting = true
                    }
                    .fileExporter(
                        isPresented: $exporting,
                        document: document,
                        contentType: .plainText
                    ) { result in
                        switch result {
                        case .success(let file):
                            print(file)
                        case .failure(let error):
                            print(error)
                        }
                    }
                }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    如上面的示例所示,使用 fileExporter 视图修饰符来启用文件导出的用户体验。还需要绑定到一个布尔值以呈现对话框。必须传递要导出的文档以及其内容类型。在完成闭包中,可以验证文档是否被正确导出,或检查失败的原因。

    文件移动

    作为额外的功能,SwiftUI 框架还为我们提供了 fileMover 视图修饰符,为用户提供了文件移动的体验。

    struct MovingExampleView: View {
        @State private var moving = false
        let file: URL
        
        var body: some View {
            Button("Move files") {
                moving = true
            }
            .fileMover(isPresented: $moving, file: file) { result in
                switch result {
                case .success(let file):
                    print(file.absoluteString)
                case .failure(let error):
                    print(error.localizedDescription)
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在上面的示例中,使用了 fileMover 视图修饰符向用户展示文件移动对话框。应该传递要移动的文件 URL,并在完成闭包中验证结果。

    总结

    下面我们总结一下,如何在SwiftUI中实现文件导入和导出,以及文件移动的基本步骤:

    • 导入文件:通过使用fileImporter视图修饰符,您可以方便地启用文件选择功能。这个修饰符允许您定义文件的类型和处理选择后的文件。用户点击"Import"按钮,系统弹出文件选择器,选择后可在闭包中处理文件。

    • 导出文件:通过使用fileExporter视图修饰符,您可以启用文件导出功能。在这种情况下,您需要提供一个符合FileDocument协议的文档类型,该文档类型定义了文件的读取和写入方式。用户可以点击"Export"按钮,选择导出的位置,然后在闭包中处理导出的结果。

    • 文件移动:额外的功能是文件移动,通过fileMover视图修饰符,您可以向用户展示文件移动对话框。您需要传递要移动的文件URL,然后在闭包中验证结果。

    这些功能可以帮助您的应用更好地处理文件的导入、导出和移动,提供更好的用户体验。

  • 相关阅读:
    SpringBoot文件上传下载
    适合新手拿来练习的springboot+vue前后端分离小Demo
    TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑
    网络精通-VLAN的高级配置之vlan mapping
    JDBC工具类
    计算机毕业设计Java幼儿校园通系统的设计与实现(系统+程序+mysql数据库+Lw文档)
    Java分支结构综合练习一之一元二次方程求解
    一文讲透CabloyJS全栈框架的来龙去脉
    使用xmlrpc连接操作odoo
    Git Flow——项目开发中经典分支管理策略
  • 原文地址:https://blog.csdn.net/qq_36478920/article/details/133793188