我正在开发一个简单的SwiftUI macOS文档应用程序。在主应用程序结构中,我想添加修改文档对象的菜单项。在基于文档的应用程序的Xcode应用程序模板中,如果我添加一个菜单项,主应用程序结构看起来类似于:
import SwiftUI
@main
struct GlobalDocApp: App {
var body: some Scene {
DocumentGroup(newDocument: GlobalDocDocument()) { file in
ContentView(document: file.$document)
}
.commands {
CommandMenu("Custom Menu") {
Button("Modify it") {
//modify document properties...
}
}
}
}
}
如何创建文档对象,以便可以从该结构体以及其他视图结构体访问它?文档对象可以在整个应用中用作@EnvironmentObject吗?
我尝试在App结构体中将文档对象声明为@StateObject,但它需要是可观察的,我的GlobalDocDocument是一个结构体,声明如下:
struct GlobalDocDocument: FileDocument
1条答案
按热度按时间qvk1mo1f1#
@StateObject只能用于类。将@StateObject用于文档类型的唯一方法是将文档类型设置为类。但是关于将类用于SwiftUI文档的文档不多。
在需要访问文档的任何SwiftUI视图中添加@Binding变量,其中文档类型为struct。
您不必在app结构体中创建绑定。
使用焦点值和焦点绑定访问SwiftUI菜单中的文档。以下文章说明如何访问SwiftUI菜单中的文档:
Accessing the Document in a SwiftUI Menu