swiftui - 在 SwiftUI 中将 FileDocumentReadConfiguration 传递给文档结构的初始化程序
问题描述
创建基于文档的 SwiftUI 项目时,文档结构包含以下初始化程序:
init(configuration: ReadConfiguration) throws {
// Code to open an existing document
}
在 Xcode 提供的初始文本编辑器项目中,当在 App 文件中调用文档的初始化程序时,您不必提供配置参数。
var body: some Scene {
DocumentGroup(newDocument: Document()) { file in
ContentView(document: file.$document)
}
}
在我的项目中,文档包含另一个结构的数组,并将文档保存在文件包中。现在编译器抱怨我configuration
在调用文档的初始化程序时缺少参数。
如果我提供一个FileDocumentReadConfiguration
对象作为configuration
参数,
DocumentGroup(newDocument: Document(configuration: FileDocumentReadConfiguration())) { file in
ContentView(document: file.$document)
}
编译器提供以下错误消息:
FileDocumentReadConfiguration 无法构造,因为它没有可访问的初始化程序
Apple 文档中的信息FileDocumentReadConfiguration
与初始化程序无关。在 Google 上搜索FileDocumentReadConfiguration
只会得到 Apple 的文档和 Hacking with Swift 论坛上的一个未回答的问题。没有人在 Stack Overflow 上问过这个问题。
如何FileDocumentReadConfiguration
向文档的初始化程序提供对象,或者如何避免configuration
像默认项目那样提供参数?
解决方案
SwiftUI 结构 FileDocumentReadConfiguration、ReferenceFileDocumentConfiguration 等的实现细节没有记录,因为它们不是公开的。为了独立于平台,SwiftUI 处理了许多可能令人困惑的默认行为,因为这样做还隐藏了很多信息。为了避免这个ReadConfiguration
难题,我们需要像 Xcode 模板一样提供一个自定义初始化器,或者在其中或在变量声明中使用默认值。那就是你在 init 中调用的DocumentGroup
初始化,让 SwiftUI 处理细节。
推荐阅读
- c - 将内存分配给 typedef 的指针
- reactjs - 如何使用 react-testing-library 在同一测试中测试不同类型的 Apollo 客户端错误?
- node.js - 在 ubuntu 20.04 上使用 Apache 设置 Node.js 应用程序时无法访问 api
- python-3.x - Python 3 print([1, 2] and 3) 输出 3
- scripting - 如何将 e.findAt 用于类似的几何模型?
- amazon-web-services - AWS Glue ETL 作业的 Scala 和 Java 版本是什么?
- flutter - 如何在 Flutter 上移动 Scaffold 的 body 和 bottomSheet?
- cplex - 为所有代理找到初始可行的解决方案
- r - 为什么 as.vector 深拷贝一个矩阵?
- php - Symfony:自动装配实现后“调用成员函数 get () on null”错误