使用 SwiftUI 4 进行窗口管理 ,解释 .openWindow、.windowResizability 等

SwiftUI 每年都变得越来越好。去年(2022 年),我们不仅收到了改进的导航 API。Apple 还大大改进了对 macOS 的支持——我认为我们在 SwiftUI 4 中收到的用于 Mac 应用程序开发的 SwiftUI API 处于同一水平,最终1.0允许在 SwiftUI 中做各种事情,而不必诉诸AppKit于一些最重要的事情共同任务。在使用 SwiftUI 3开发RemafoX时,我在 Mac 上体验过 SwiftUI,在某些方面,这真的是一场噩梦。

来自 iOS 开发,我希望不必学习AppKit. 但我不得不编写各种骇人听闻的代码来做最简单的事情,比如关闭一个窗口。或者禁用窗口上的全屏按钮。但有个好消息:通过将我的应用程序目标增加到 macOS 13.0,我终于可以通过 SwiftUI 进行窗口管理并消除我在我的应用程序中遇到的所有黑客攻击。

最后,我的应用感觉真的是 100% SwiftUI 驱动的。以下是我可以使用的所有新 API,这些 API 按我想要完成的任务分组和命名。由于窗口管理可能是 SwiftUI 时代 iOS 和 macOS 开发之间最大的区别,本文还可以帮助任何从 iOS 切换到 macOS 的人了解窗口管理是如何在 Mac 上完成的。

打开一个窗口

如果您使用的是 a WindowGroup(这是 SwiftUI 3 上唯一可用的窗口类型),对于 SwiftUI 4,您有两个选择:第一个,之前已经支持,是使用如下方法handlesExternalEvents:

enum Window: String, Identifiable {
   case paywall
   // ...

   var id: String { self.rawValue }
}

@main

猜你喜欢

转载自blog.csdn.net/iCloudEnd/article/details/130970861