将FileDocumentReadConfiguration传递给文档结构';SwiftUI中的s初始值设定项
创建基于文档的SwiftUI项目时,文档结构包含以下初始值设定项:将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
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
}