将FileDocumentReadConfiguration传递给文档结构';SwiftUI中的s初始值设定项

将FileDocumentReadConfiguration传递给文档结构';SwiftUI中的s初始值设定项,swiftui,Swiftui,创建基于文档的SwiftUI项目时,文档结构包含以下初始值设定项: init(configuration: ReadConfiguration) throws { // Code to open an existing document } 在Xcode提供的初始文本编辑器项目中,在应用程序文件中调用文档的初始值设定项时,不必提供配置参数 var body: some Scene { DocumentGroup(newDocument: Document()) { file i

创建基于文档的SwiftUI项目时,文档结构包含以下初始值设定项:

init(configuration: ReadConfiguration) throws {
    // Code to open an existing document
}
在Xcode提供的初始文本编辑器项目中,在应用程序文件中调用文档的初始值设定项时,不必提供配置参数

var body: some Scene {
    DocumentGroup(newDocument: Document()) { file in
        ContentView(document: file.$document)
    }
}
在我的项目中,文档包含另一个结构的数组,并将文档保存在文件包中。现在,编译器抱怨我在调用文档的初始值设定项时缺少
配置
参数

如果我提供一个
FileDocumentReadConfiguration
对象作为
configuration
参数

DocumentGroup(newDocument: Document(configuration: FileDocumentReadConfiguration())) { file in
    ContentView(document: file.$document)
}
编译器提供以下错误消息:

无法构造FileDocumentReadConfiguration,因为它没有 可访问初始值设定项

苹果文档中有关
FileDocumentReadConfiguration
的信息与初始化器无关。在谷歌上搜索
FileDocumentReadConfiguration
,只会得到苹果的文档和一个关于Swift论坛黑客攻击的未回答问题。关于堆栈溢出,还没有人问过这个问题

如何向文档的初始值设定项提供
FileDocumentReadConfiguration
对象,或者如何避免像默认项目那样提供
configuration
参数

这是一个创建新文档的地方,即还没有文件表示

如果您将
文档
声明为
文件文档
,则需要为初始值设定项提供
读取配置
,在本例中,它是
FileDocumentReadConfiguration
的typealias,当您的应用程序被要求打开相应文档类型的现有文档时,系统将调用此初始值设定项:

struct Document: FileDocument {

    // here configuration is-a `FileDocumentReadConfiguration`
    init(configuration: ReadConfiguration) throws {
        // read here your content from configuration using `configuration.file` 
    }

   // ... other code
}

SwiftUI structs FileDocumentReadConfiguration、ReferenceFileDocumentConfiguration等的实现细节没有记录下来,只是因为它们不是公共的。为了独立于平台,SwiftUI处理了许多可能令人困惑的默认行为,因为这样做也隐藏了大量信息。为了避免出现
ReadConfiguration
难题,我们需要像Xcode模板一样,在那里或变量声明中提供一个带有默认值的自定义初始值设定项。这就是您在
DocumentGroup
init中调用的初始化,并让SwiftUI处理细节。

SwiftUI文档应用程序的Xcode项目为文档提供了此初始化,因此我有了初始化器。问题是编译器希望我在调用初始值设定项时提供ReadConfiguration实例。
required
关键字仅适用于类。当我将
required
添加到我的结构的init时,我得到以下编译器错误:非类类型的required初始值设定项。向文档结构添加自定义初始值设定项可消除编译器错误。非常感谢。
struct Document: FileDocument {

    // here configuration is-a `FileDocumentReadConfiguration`
    init(configuration: ReadConfiguration) throws {
        // read here your content from configuration using `configuration.file` 
    }

   // ... other code
}