假设我有一个应用

var storeVM = BookStoreViewModel(bla1: bla1, bla2: bla2, bla3: bla3)

@SceneBuilder var body: some Scene {
    WindowGroup {
        BookStoreView( model: storeVM )
    }

    #if os(macOS)
    Settings {
        SettingsView(model: config)
    }
    #endif
}
BookStore具有一个网格,其中许多书籍保存在某个数据库中。
可以通过以下方式启动BookView:
BookView(model: bookViewModel)
目标:在新的单独窗口中打开BookView(例如,通过单击按钮)。我怎样才能做到这一点?

奖励问题:
如何从代码中打开SettingsView(model: config)

PS:NavigationLink对我来说不是解决方案,因为我没有使用NavigationView

最佳答案

尝试类似以下的操作(只是想法-无法测试)

class BookViewModel: ObservableObject {}

class AppState: ObservableObject {
    @Published var selectedBook: BookViewModel?
}

@main
struct SwiftUI2_MacApp: App {
    @StateObject var appState = AppState()

    @SceneBuilder
    var body: some Scene {
        WindowGroup {         // main scene
            ContentView()
              .environmentObject(appState)   // inject to update
                                             // selected book
        }

        WindowGroup("Book Viewer") { // other scene
            if appState.selectedBook != nil {
                Book(model: appState.selectedBook)
            }
        }
    }
}

10-08 05:24