你如何从 macOS 上的 SwiftUI 按钮打开 2 个窗口组?

How do you open 2 windowgroups from SwiftUI button on macOS?

我有一个应用程序,我需要一个按钮打开两个 windows。在 App 结构中,我有两个 window 组设置

@main
struct myApp: App {

  var body : some Scene {

      WindowGroup() {
         WelcomeView()
      }

      WindowGroup("FirstViewGroup") {

        FirstView()
        
      }
      .handlesExternalEvents(matching: Set(arrayLiteral: "FirstViewGroup"))

      WindowGroup("SecondViewGroup") {
        SecondView()
      }
      .handlesExternalEvents(matching: Set(arrayLiteral: "SecondViewGroup"))
  }
}

在 WelcomeView 中,我有以下按钮操作:

Button {
   if let firstURL = URL(string: "myApp://FirstViewGroup"), let secondURL = URL(string: "myApp://SecondViewGroup") {
      NSWorkspace.shared.open(firstURL)
      NSWorkspace.shared.open(secondURL)
   }
} label: {
  Text("Open Windows")
}

当我注释掉按钮操作中的 NSWorkspace.shared.open 行之一时,相应的 window 打开。但是当我有两个连续的 NSWorkspace.shared.open 调用时,我只得到第一个。想法?我在 info.plist 中正确设置了 URL 类型(因为每个 window 在单独调用时都会成功打开)

尝试在下一个事件循环中打开第二个 URL,例如

Button {
   if let firstURL = URL(string: "myApp://FirstViewGroup"), let secondURL = URL(string: "myApp://SecondViewGroup") {
      NSWorkspace.shared.open(firstURL)
      DispatchQueue.main.async {
         NSWorkspace.shared.open(secondURL)   // << here !!
      }
   }
} label: {
  Text("Open Windows")
}