Apple开发知识碎片:关于我对SwiftUI以及UIKit,AppKit的浅显理解

674 阅读3分钟

可能大家刚开始学习iOS或者macOS开发的时候都是或多或少的有这个问题,Apple生态这么多Kit(工具库),之间到底怎么区别。其实我一直在将其对比于前端React开发中的技术栈,本文我们主要讲解下SwiftUI 以及 UIKit, AppKit的应用区别。

简单来说,如果说在macOS开发中,AppKit就是类似于JS, SwiftUI类似于 React。前者是可以操作元素对象编程,实现动态添加元素,删除元素,类编程。后者是声明式函数式编程。如果你需要操作元素,那么你可以用到UIKit或者AppKit,当然这只是其中之一哈。

AppKit:

在 AppKit 中,确实可以通过编程方式动态创建 UI 元素(例如 NSButton, NSTextField 等)并将其添加到视图中。AppKit 提供了完整的视图层级管理,你可以手动控制视图的添加、移除、布局、以及与其他视图的关系。整个视图树的管理是完全可控的。

SwiftUI:

SwiftUI 是声明式的 UI 框架,核心思想是状态驱动的 UI 更新。在 SwiftUI 中,UI 是由你的数据或状态自动生成和更新的,而不是通过命令式地去操作视图层次结构。因此,SwiftUI 没有直接提供类似 AppKit 或 UIKit 中那种手动操作视图组件(比如动态添加/移除子视图)的功能。

具体而言,SwiftUI 不允许像在 AppKit 中那样,通过函数调用去动态地将元素添加到某个容器中。相反,你通过声明状态,然后 SwiftUI 自动地根据状态变化重新渲染视图。例如,使用 @State@Binding 来控制某些视图的显隐、更新等。

SwiftUI 的声明式方式

struct ContentView: View {
    @State private var showButton = false

    var body: some View {
        VStack {
            if showButton {
                Button("Dynamically added button", action: {})
            }
            Button("Toggle Button") {
                showButton.toggle()
            }
        }
    }
}

我们通过 @State 来控制是否显示一个按钮,这种方式不同于 AppKit 中的命令式添加视图,SwiftUI 会根据状态 showButton 的变化自动渲染 UI。

AppKit: 提供命令式的方式来动态操作视图元素,你可以明确控制视图的添加、删除等。

SwiftUI: 是声明式框架,UI 是由数据或状态驱动的,不能手动操作单独的 UI 组件,而是通过改变状态来间接控制视图的更新。

当然👍在本文中我们通过对比AppKit与SwiftUI之间的区别,而AppKit是Apple之前在macOS系统编程的工具库,他只能用在开发macOS应用时使用,同理在开发iOS应用时,在没有SwiftUI时候,前辈们使用的都是UIKit(其实简单的说这就是AppKit的手机版)。

在SwiftUI出现后,他支持Apple全生态的开发使用,意思可以不同的端使用,那就不区分iOS还是macOS。但是目前还没有那么完全,因为有时候还是会有SwiftUI实现不到的地方需要借助UIKit或者AppKit。

好的,关于SwiftUI,AppKit方面的浅显应用方面理解介绍到这,可能很低级,但是希望对你有帮助!