最近学习macOS AppKit API,至少学习了42个macOS AppKit API,在学习过程中发现,大部分AppKit API基本可以被SwiftUI平替,平替的结果就是在开发mac应用的过程中,不需要再学习多余的AppKit API,只需要掌握SwiftUI,降低学习成本。
但是macOS上的部分功能仍然需要AppKit API实现,特别是需要自定义或高级配置,SwiftUI还没有API提供支持,就需要去学习这部分AppKit的API。
下面是罗列的是macOS AppKit 常用的API,涉及了视图、控件、容器、窗口/控制器、颜色/几何/事件/状态栏等多个层面。将它们分为几大类,并一一分析哪些已可被 SwiftUI 平替,哪些仍需使用 AppKit,以便在 macOS 11+ 的 SwiftUI 开发中灵活使用。
1、通用UI控件类
1、NSButton:SwiftUI 平替 Button,完全替代,包括图标、文字、样式等。
2、NSTextField:SwiftUI 平替TextField、SecureField和TextEditor,大部分情况都可以平替,支持绑定。
3、NSTextView:SwiftUI平替TextEditor,基本替代(复杂功能需桥接)。
4、NSSlider:SwiftUI 平替Slider,支持绑定、样式控制。
5、NSPopUpButton:SwiftUI平替Picker,可用 Picker + MenuStyle 实现下拉选择。
6、NSForm:SwiftUI平替Form,完全支持。
7、NSComboBox:SwiftUI平替Picker + TextField,无完全平替(需组合实现)。
8、NSColorWell:SwiftUI平替ColorPicker,macOS 11+ 中 SwiftUI 原生支持颜色选择。
9、NSTableView:SwiftUI部分平替List + Grid(简单表格/列表),Table(SwiftUI 3,macOS 12+引入),如果支持macOS 12+,使用Table,支持macOS11及以下,仍需嵌套AppKit NSTableView(可用 NSViewRepresentable 封装)。
10、NSLayoutManager / NSTextStorage / NSTextContainer:❌SwiftUI不涉及文本排版底层组件。
11、NSProgressIndicator:SwiftUI平替ProgressView,加载指示器,支持 determinate/indeterminate。
12、NSSegmentedControl:SwiftUI平替Picker + segmented 样式,分段选择器。
13、NSPageController:SwiftUI平替TabView, TabViewStyle.page,分页控制器,部分平替。
14、NSLevelIndicator:SwiftUI平替自定义 ProgressView / 条形图,用于电量/评分等级条。
15、NSMatrix:SwiftUI平替Grid + Toggle/RadioButton,需组合使用。
16、NSRadioButton / NSButtonCell:SwiftUI平替Picker, Toggle, 自定义 Radio,单选按钮,需手动实现 Radio 样式。
17、NSCheckBox:SwiftUI平替Toggle,复选框,完全替代。
18、NSSearchField:SwiftUI平替TextField + .searchField 样式,样式控制有限。
19、NSAlert:SwiftUI平替 .alert(),平替(复杂提示需桥接)。
2、容器/布局视图
1、NSView:SwiftUI平替View 协议 + 各种容器(VStack、HStack、ZStack、GeometryReader),完全替代,一切 UI 的基础。
2、NSScrollView:SwiftUI平替ScrollView,原生支持纵向/横向滚动内容。
3、NSSplitView:SwiftUI平替NavigationSplitView, HSplitView, VSplitView (macOS 13+),SwiftUI 3 起支持,使用简单直观。
4、NSToolbar:SwiftUI平替toolbar 修饰符,macOS 11+ 支持,为窗口添加工具栏项。
5、NSPopover:SwiftUI平替popover,完整平替。
6、NSPanel:SwiftUI平替.sheet,.popover,自定义 WindowGroup,需判断具体用途,一般能替代。
7、accessoryView:❌SwiftUI无平替,需 AppKit(SwiftUI 无法自定义 NSOpenPanel 的附加视图)。
8、NSStackView:SwiftUI平替VStack, HStack,垂直/水平布局容器。
9、NSBox:SwiftUI平替Group, Divider, Section,分割线/分组框。
3、状态栏/菜单栏
1、NSStatusBar / NSStatusItem / NSStatusBarButton:SwiftUI平替MenuBarExtra,完全替代(macOS 13+)。
2、NSMenu / NSMenuItem:SwiftUI平替Menu视图,SwiftUI 的 Menu 支持上下文和常规菜单。
3、NSOpenPanel / NSSavePanel:SwiftUI平替FileImporter / FileExporter,SwiftUI 原生替代(配合 document scene)。
4、NSMenuItem.validate():❌无SwiftUI平替,动态菜单项状态需 AppKit 管理菜单逻辑。
4、图像、媒体
1、NSImageView:SwiftUI平替Image,完全替代。
2、NSImage:SwiftUI平替Image(nsImage:),可桥接显示NSImage。
3、NSMovieView,SwiftUI平替VideoPlayer(AVKit),使用SwiftUI + AVKit播放视频。
5、颜色/外观/空间几何
1、NSAppearance:SwiftUI平替 .preferredColorScheme / .colorScheme,可控制 Light/Dark 模式。
2、NSColor:SwiftUI平替Color,完全替代,支持多平台。
3、NSColorPanel:SwiftUI平替ColorPicker,简化替代,若需独立弹出面板仍需 AppKit。
4、NSColorPicker:❌暂无 SwiftUI 平替,属于系统插件协议,SwiftUI 不支持注册扩展插件。
5、NSSize / NSPoint / NSRect:SwiftUI平替CGSize / CGPoint / CGRect,CoreGraphics 与 SwiftUI 通用。
6、拖放、事件响应
1、NSDraggingDestination:SwiftUI平替 .onDrop 功能有限,但不支持高级拖放行为。
2、NSPasteboard:❌SwiftUI无平替,剪贴板读写需要手动桥接AppKit。
3、NSDraggingSource:❌SwiftUI无平替,拖放源。
4、NSDraggingItem,❌SwiftUI无平替,拖放内容。
5、NSEvent:❌SwiftUI无平替,SwiftUI 不支持低层次事件,如果需要监听键盘、鼠标事件等,仍需 AppKit。
6、NSResponder,❌SwiftUI无平替,SwiftUI 不暴露 responder chain,需要响应链时必须配合 AppKit 使用。
7、NSWorkspace:❌SwiftUI无平替,但是可以在SwiftUI中直接调用,只需导入AppKit。
8、NSApplication:SwiftUI提供部分封装功能,@main 的 App 结构体封装了基本 NSApplication 生命周期,也可以在SwiftUI中直接调用NSApplication的方法。
7、文档架构类
1、NSDocument:SwiftUI平替DocumentGroup (macOS 11+),SwiftUI 提供简化模型,复杂文档仍需 AppKit。
2、NSDocumentController:❌SwiftUI 默认不提供多文档控制器;如需复杂管理需使用 AppKit。
8、控制器类
1、NSWindow:SwiftUI平替WindowGroup, .windowStyle,可生成窗口,但需特殊控制仍需用 NSWindowController。
2、NSWindowController: ❌SwiftUI无对应,SwiftUI 无窗口控制器,需结合 AppKit 管理窗口生命周期。
3、NSViewController:View + @Environment(\.presentationMode),可部分模拟,复杂页面管理仍需 NSViewController。
4、NSSplitViewController:SwiftUI平替NavigationSplitView、SplitView, HSplitView, VSplitView,可完全替代(macOS 13+)。
其他系统组件
1、NSUserDefaults:SwiftUI平替@AppStorage,用户默认值存储。
2、NSFileManager:SwiftUI平替FileManager,直接使用。
3、NSCoder:SwiftUI 无需显式编码/解码视图,NSCoder 用于归档 NSView。
总结
在使用SwiftUI开发macOS应用的过程中,如果需要兼容macOS 11、macOS 12及以前的版本,可能还需要SwiftUI + AppKit混合开发,需要桥接使用AppKit的代码。
如果开发macOS 13+,简单的应用基本都可以通过SwiftUI实现,个别复杂功能可能需要在macOS 14+等版本中使用。
在考虑macOS开发版本的过程中,可以参考《如何选择macOS最低版本?》。
虽然很多AppKit控制器,基本无法在SwiftUI中使用,但SwiftUI也可以通过 scenePhase 实现基本的生命周期管理。
另外,简单的功能基本都可以在SwiftUI中找到平替,对于一些高度自定义的功能,AppKit可能更适合,就需要桥接使用。
相关文章
1、如何选择macOS最低版本?:https://fangjunyu.com/2025/06/18/%e5%a6%82%e4%bd%95%e9%80%89%e6%8b%a9macos%e6%9c%80%e4%bd%8e%e7%89%88%e6%9c%ac%ef%bc%9f/
2、SwiftUI监听应用生命周期变化的scenePhase:https://fangjunyu.com/2024/12/14/swiftui%e7%9b%91%e5%90%ac%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e5%8f%98%e5%8c%96%e7%9a%84scenephase/
3、macOS按钮NSButton:https://fangjunyu.com/2025/07/02/macos%e6%8c%89%e9%92%aensbutton/
4、macOS文本内容NSTestField:https://fangjunyu.com/2025/07/03/macos%e6%96%87%e6%9c%ac%e5%86%85%e5%ae%b9nstestfield/
5、Swift 文本输入方法TextEditor和TextField:https://fangjunyu.com/2024/11/03/swift-%e6%96%87%e6%9c%ac%e8%be%93%e5%85%a5%e6%96%b9%e6%b3%95texteditor%e5%92%8ctextfield/
6、macOS滑块NSSlider:https://fangjunyu.com/2025/07/02/macos%e6%bb%91%e5%9d%97nsslider/
7、SwiftUI滑块视图组件Slider:https://fangjunyu.com/2025/01/10/swiftui%e6%bb%91%e5%9d%97%e8%a7%86%e5%9b%be%e7%bb%84%e4%bb%b6slider/
8、macOS下拉菜单NSPopUpButton:https://fangjunyu.com/2025/06/28/macos%e4%b8%8b%e6%8b%89%e8%8f%9c%e5%8d%95nspopupbutton/
9、SwiftUI多选项视图组件Picker:https://fangjunyu.com/2025/01/10/swiftui%e5%a4%9a%e9%80%89%e9%a1%b9%e8%a7%86%e5%9b%be%e7%bb%84%e4%bb%b6picker/
10、SwiftUI表单Form:https://fangjunyu.com/2025/07/05/swiftui%e8%a1%a8%e5%8d%95form/
11、mac颜色选择控件NSColorWell:https://fangjunyu.com/2025/07/01/mac%e9%a2%9c%e8%89%b2%e9%80%89%e6%8b%a9%e6%8e%a7%e4%bb%b6nscolorwell/
12、SwiftUI表格Table:https://fangjunyu.com/2025/07/05/swiftui%e8%a1%a8%e6%a0%bctable/
13、SwiftUI进度指示器ProgressView:https://fangjunyu.com/2025/01/10/swiftui%e8%bf%9b%e5%ba%a6%e6%8c%87%e7%a4%ba%e5%99%a8progressview/
14、SwiftUI选项卡式视图切换TabView:https://fangjunyu.com/2024/12/09/swiftui%e9%80%89%e9%a1%b9%e5%8d%a1%e5%bc%8f%e8%a7%86%e5%9b%be%e5%88%87%e6%8d%a2tabview/
15、SwiftUI开关控件Toggle:https://fangjunyu.com/2025/01/01/swiftui%e5%bc%80%e5%85%b3%e6%8e%a7%e4%bb%b6toggle/
16、SwiftUI Alert提示框:https://fangjunyu.com/2024/12/07/swift-alert%e6%8f%90%e7%a4%ba%e6%a1%86/
17、SwiftUI列表List:https://fangjunyu.com/2025/07/05/swiftui%e5%88%97%e8%a1%a8list/
18、SwiftUI颜色控件ColorPicker:https://fangjunyu.com/2025/07/02/swiftui%e9%a2%9c%e8%89%b2%e6%8e%a7%e4%bb%b6colorpicker/
19、macOS视图NSView:https://fangjunyu.com/2025/07/01/macos%e8%a7%86%e5%9b%bensview/
20、SwiftUI容器视图GeometryReader:https://fangjunyu.com/2024/12/15/swiftui%e5%ae%b9%e5%99%a8%e8%a7%86%e5%9b%begeometryreader/
21、macOS滚动视图NSScrollView:https://fangjunyu.com/2025/07/03/macos%e6%bb%9a%e5%8a%a8%e8%a7%86%e5%9b%bensscrollview/
22、SwiftUI滚动内容ScrollView:https://fangjunyu.com/2024/12/20/swiftui%e6%bb%9a%e5%8a%a8%e5%86%85%e5%ae%b9scrollview/
23、macOS子视图区域NSSplitView:https://fangjunyu.com/2025/07/03/macos%e5%ad%90%e8%a7%86%e5%9b%be%e5%8c%ba%e5%9f%9fnssplitview/
24、SwiftUI多栏导航界面NavigationSplitView:https://fangjunyu.com/2024/12/21/swiftui%e5%a4%9a%e6%a0%8f%e5%af%bc%e8%88%aa%e7%95%8c%e9%9d%a2navigationsplitview/
25、macOS工具栏NSToolbar:https://fangjunyu.com/2025/07/03/macos%e5%b7%a5%e5%85%b7%e6%a0%8fnstoolbar/
26、SwiftUI在iOS中的toolbar工具栏:https://fangjunyu.com/2024/12/07/swift-toolbar%e5%b7%a5%e5%85%b7%e6%a0%8f/
27、macOS浮动窗口NSPopover:https://fangjunyu.com/2025/06/29/macos%e6%b5%ae%e5%8a%a8%e7%aa%97%e5%8f%a3nspopover/
28、SwiftUI iPad显示浮窗popover:https://fangjunyu.com/2025/01/02/swiftui-ipad%e6%98%be%e7%a4%ba%e6%b5%ae%e7%aa%97popover/
29、macOS浮窗NSPanel:https://fangjunyu.com/2025/07/02/macos%e6%b5%ae%e7%aa%97nspanel/
30、macOS文件对话框自定义视图accessoryView:https://fangjunyu.com/2025/06/28/macos%e6%96%87%e4%bb%b6%e5%af%b9%e8%af%9d%e6%a1%86%e8%87%aa%e5%ae%9a%e4%b9%89%e8%a7%86%e5%9b%beaccessoryview/
31、SwiftUI透明布局容器Group:https://fangjunyu.com/2024/12/23/swiftui%e9%80%8f%e6%98%8e%e5%b8%83%e5%b1%80%e5%ae%b9%e5%99%a8group/
32、SwiftUI Divider分割线:https://fangjunyu.com/2025/06/11/swiftui-divider%e5%88%86%e5%89%b2%e7%ba%bf/
33、SwiftUI List和Form的分组视图Section:https://fangjunyu.com/2025/01/13/swiftui-list%e5%92%8cform%e7%9a%84%e5%88%86%e7%bb%84%e8%a7%86%e5%9b%besection/
34、Swift弹出sheet视图:https://fangjunyu.com/2024/11/25/swift%e5%bc%b9%e5%87%basheet%e8%a7%86%e5%9b%be/
35、macOS状态栏图标(系统右上角)NSStatusBar:https://fangjunyu.com/2025/06/24/macos%e7%8a%b6%e6%80%81%e6%a0%8f%e5%9b%be%e6%a0%87%ef%bc%88%e7%b3%bb%e7%bb%9f%e5%8f%b3%e4%b8%8a%e8%a7%92%ef%bc%89nsstatusbar/
36、macOS状态栏图标关键组件NSStatusItem:https://fangjunyu.com/2025/06/26/macos%e8%8f%9c%e5%8d%95%e6%a0%8f%e5%9b%be%e6%a0%87%e5%85%b3%e9%94%ae%e7%bb%84%e4%bb%b6nsstatusitem/
37、macOS状态栏图标按钮类NSStatusBarButton:https://fangjunyu.com/2025/06/26/macos%e7%8a%b6%e6%80%81%e6%a0%8f%e5%9b%be%e6%a0%87%e6%8c%89%e9%92%ae%e7%b1%bbnsstatusbarbutton/
38、macOS顶部和上下文菜单NSMenu:https://fangjunyu.com/2025/06/23/macos%e9%a1%b6%e9%83%a8%e5%92%8c%e4%b8%8a%e4%b8%8b%e6%96%87%e8%8f%9c%e5%8d%95nsmenu/
39、macOS单个菜单项类NSMenuItem:https://fangjunyu.com/2025/06/25/macos%e5%8d%95%e4%b8%aa%e8%8f%9c%e5%8d%95%e9%a1%b9%e7%b1%bbnsmenuitem/
40、SwiftUI可操作选项视图Menu:https://fangjunyu.com/2024/11/08/swiftui%e5%8f%af%e6%93%8d%e4%bd%9c%e9%80%89%e9%a1%b9%e8%a7%86%e5%9b%bemenu/
41、SwiftUI状态栏MenuBarExtra:https://fangjunyu.com/2025/06/29/macos%e7%8a%b6%e6%80%81%e6%a0%8fmenubarextra/
42、macOS文件选择对话框NSOpenPanel:https://fangjunyu.com/2025/06/27/macos%e6%96%87%e4%bb%b6%e9%80%89%e6%8b%a9%e5%af%b9%e8%af%9d%e6%a1%86nsopenpanel/
43、macOS保存文件的对话框NSSavePanel:https://fangjunyu.com/2025/06/27/macos%e4%bf%9d%e5%ad%98%e6%96%87%e4%bb%b6%e7%9a%84%e5%af%b9%e8%af%9d%e6%a1%86nssavepanel/
44、SwiftUI导入外部文件Fileimporter:https://fangjunyu.com/2025/07/05/swiftui%e5%af%bc%e5%85%a5%e5%a4%96%e9%83%a8%e6%96%87%e4%bb%b6fileimporter/
45、SwiftUI保存文件FileExporter:https://fangjunyu.com/2025/07/05/swiftui%e4%bf%9d%e5%ad%98%e6%96%87%e4%bb%b6fileexporter/
46、Swift显示图像的Image类:https://fangjunyu.com/2024/11/22/swift%e6%98%be%e7%a4%ba%e5%9b%be%e5%83%8f%e7%9a%84image%e7%b1%bb/
47、MacOS图像显示类NSImage:https://fangjunyu.com/2024/11/22/macos%e5%9b%be%e5%83%8f%e6%98%be%e7%a4%ba%e7%b1%bbnsimage/
48、Apple多媒体框架AVFoundation:https://fangjunyu.com/2024/12/11/apple%e5%a4%9a%e5%aa%92%e4%bd%93%e6%a1%86%e6%9e%b6avfoundation/
49、SwiftUI检测浅色或深色模式:https://fangjunyu.com/2025/01/09/swiftui%e6%a3%80%e6%b5%8b%e6%b5%85%e8%89%b2%e6%88%96%e6%b7%b1%e8%89%b2%e6%a8%a1%e5%bc%8f/
50、macOS用户界面外观风格NSAppearance:https://fangjunyu.com/2025/07/02/macos%e7%94%a8%e6%88%b7%e7%95%8c%e9%9d%a2%e5%a4%96%e8%a7%82%e9%a3%8e%e6%a0%bcnsappearance/
51、macOS颜色NSColor:https://fangjunyu.com/2025/07/01/macos%e9%a2%9c%e8%89%b2nscolor/
52、macOS颜色选择面板NSColorPanel:https://fangjunyu.com/2025/07/02/macos%e9%a2%9c%e8%89%b2%e9%80%89%e6%8b%a9%e9%9d%a2%e6%9d%bfnscolorpanel/
53、SwiftUI颜色控件ColorPicker:https://fangjunyu.com/2025/07/02/swiftui%e9%a2%9c%e8%89%b2%e6%8e%a7%e4%bb%b6colorpicker/
54、macOS颜色面板插件接口NSColorPicker:https://fangjunyu.com/2025/07/02/macos%e9%a2%9c%e8%89%b2%e9%9d%a2%e6%9d%bf%e6%8f%92%e4%bb%b6%e6%8e%a5%e5%8f%a3nscolorpicker/
55、macOS尺寸NSSize:https://fangjunyu.com/2025/07/01/macos%e5%b0%ba%e5%af%b8nssize/
56、macOS二维空间点NSPoint:https://fangjunyu.com/2025/07/01/macos%e4%ba%8c%e7%bb%b4%e7%a9%ba%e9%97%b4%e7%82%b9nspoint/
57、macOS矩形NSRect:https://fangjunyu.com/2025/07/01/macos%e7%9f%a9%e5%bd%a2nsrect/
58、Apple二维图像绘制框架Core Graphics:https://fangjunyu.com/2024/12/16/apple%e4%ba%8c%e7%bb%b4%e5%9b%be%e5%83%8f%e7%bb%98%e5%88%b6%e6%a1%86%e6%9e%b6core-graphics/
59、macOS拖放行为NSDraggingDestination:https://fangjunyu.com/2025/07/04/macos%e6%8b%96%e6%94%be%e8%a1%8c%e4%b8%bansdraggingdestination/
60、SwiftUI拖放操作onDrop:https://fangjunyu.com/2025/07/04/swiftui%e6%8b%96%e6%94%be%e6%93%8d%e4%bd%9condrop/
61、macOS用户输入事件NSEvent:https://fangjunyu.com/2025/07/04/macos%e7%94%a8%e6%88%b7%e8%be%93%e5%85%a5%e4%ba%8b%e4%bb%b6nsevent/
62、macOS UI控件父类NSResponder:https://fangjunyu.com/2025/07/03/macos-ui%e6%8e%a7%e4%bb%b6%e7%88%b6%e7%b1%bbnsresponder/
63、macOS应用管理类NSWorkspace:https://fangjunyu.com/2025/06/22/macos%e5%ba%94%e7%94%a8%e7%ae%a1%e7%90%86%e7%b1%bbnsworkspace/
64、macOS核心对象NSApplication:https://fangjunyu.com/2025/06/19/macos%e6%a0%b8%e5%bf%83%e5%af%b9%e8%b1%a1nsapplication/
65、macOS构建文档的NSDocument:https://fangjunyu.com/2025/07/03/macos%e6%9e%84%e5%bb%ba%e6%96%87%e6%a1%a3%e7%9a%84nsdocument/
66、macOS文档控制器NSDocumentController:https://fangjunyu.com/2025/07/03/macos%e6%96%87%e6%a1%a3%e6%8e%a7%e5%88%b6%e5%99%a8nsdocumentcontroller/
67、SwiftUI文档类型DocumentGroup:https://fangjunyu.com/2025/07/05/swiftui%e6%96%87%e6%a1%a3%e7%b1%bb%e5%9e%8bdocumentgroup/
68、macOS窗口NSWindow:https://fangjunyu.com/2025/07/01/macos%e7%aa%97%e5%8f%a3nswindow/
69、macOS管理窗口的控制器类NSWindowController:https://fangjunyu.com/2025/06/30/macos%e7%ae%a1%e7%90%86%e7%aa%97%e5%8f%a3%e7%9a%84%e6%8e%a7%e5%88%b6%e5%99%a8%e7%b1%bbnswindowcontroller/
70、macOS管理视图的NSViewController:https://fangjunyu.com/2025/07/01/macos%e7%ae%a1%e7%90%86%e8%a7%86%e5%9b%be%e7%9a%84nsviewcontroller/
71、macOS分栏控制器NSSplitViewController:https://fangjunyu.com/2025/07/04/macos%e5%88%86%e6%a0%8f%e6%8e%a7%e5%88%b6%e5%99%a8nssplitviewcontroller/
72、Swift存储属性包装器@AppStorage:https://fangjunyu.com/2024/10/28/swift%e5%ad%98%e5%82%a8%e5%b1%9e%e6%80%a7%e5%8c%85%e8%a3%85%e5%99%a8appstorage/
73、Swift 管理文件的FileManager类:https://fangjunyu.com/2024/11/03/swift-%e7%ae%a1%e7%90%86%e6%96%87%e4%bb%b6%e7%9a%84filemanager%e7%b1%bb/
74、macOS对象编解码NSCoder:https://fangjunyu.com/2025/07/04/macos%e5%af%b9%e8%b1%a1%e7%bc%96%e8%a7%a3%e7%a0%81nscoder/