前言

我这里是macOS Catalina(10.15),如果是macOS 11(big sur) 和 macOS 12(Monterey)也适用。
老版本的macOS有些不被支持,请查阅相关文档


一、Swift 语言简介

Swift 是 Apple 于 2014 年推出的现代编程语言,用于开发 iOS、macOS、watchOS 和 tvOS 应用。它结合了 C 的性能和脚本语言的易用性,旨在替代 Objective-C。

核心特性:

  • 安全设计:可选类型(Optionals)避免空指针异常
  • 高性能:LLVM 编译器优化,接近 C++ 的运行速度
  • 易读语法:类型推断、简洁闭包、字符串插值
  • 交互式开发:Playground 实时代码预览
  • 内存管理:自动引用计数(ARC)简化内存管理
  • 跨平台:支持 Linux/Windows,服务端开发

版本演进:

版本 年份 重要特性
Swift 1.0 2014 初始发布
Swift 2.0 2015 错误处理(do-try-catch)
Swift 4.0 2017 Codable 协议
Swift 5.0 2019 ABI 稳定性
Swift 5.9 2023 宏(Macros)支持

二、macOS 开发环境配置

1. 安装 Xcode

  1. 打开 App Store
  2. 搜索 “Xcode”
  3. 点击”获取” → “安装”(约 10GB 空间)
  4. 安装后启动,接受许可协议

2. 验证安装

1
2
3
# 终端检查
swift --version
# 应输出:Apple Swift version 5.x.x

3. 创建 Swift Playground(可选)

  1. 打开 Xcode → File → New → Playground
  2. 选择 “macOS” → “Blank”
  3. 输入测试代码:
1
2
import Foundation
print("Hello, Swift!")

三、计算器开发实战

1. 创建新项目

  1. Xcode → File → New → Project
  2. 选择 macOS → App → Next
  3. 输入产品名:SimpleCalculator
  4. 语言选择 Swift,界面选择 SwiftUI

2. 界面设计(SwiftUI)

修改 ContentView.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import SwiftUI

struct CalculatorButton: View {
var title: String
var action: () -> Void

var body: some View {
Button(action: action) {
Text(title)
.font(.title)
.frame(width: 60, height: 60)
.background(Color.gray.opacity(0.2))
.cornerRadius(30)
}
.buttonStyle(PlainButtonStyle())
}
}

struct ContentView: View {
@State private var display = "0"
@State private var currentNumber: Double = 0
@State private var previousNumber: Double = 0
@State private var operation: String? = nil

let buttons = [
["7", "8", "9", "÷"],
["4", "5", "6", "×"],
["1", "2", "3", "-"],
["0", ".", "=", "+"]
]

var body: some View {
VStack(spacing: 20) {
// 显示区域
Text(display)
.font(.system(size: 48))
.frame(maxWidth: .infinity, alignment: .trailing)
.padding(.horizontal)

// 按钮网格
ForEach(buttons, id: \.self) { row in
HStack(spacing: 20) {
ForEach(row, id: \.self) { button in
CalculatorButton(title: button) {
buttonTapped(button)
}
}
}
}
}
.frame(width: 300, height: 400)
}

// 按钮处理逻辑
func buttonTapped(_ button: String) {
switch button {
case "0"..."9":
if display == "0" {
display = button
} else {
display += button
}
currentNumber = Double(display) ?? 0

case ".":
if !display.contains(".") {
display += "."
}

case "+", "-", "×", "÷":
previousNumber = currentNumber
operation = button
display = "0"

case "=":
if let op = operation {
switch op {
case "+": currentNumber = previousNumber + currentNumber
case "-": currentNumber = previousNumber - currentNumber
case "×": currentNumber = previousNumber * currentNumber
case "÷": currentNumber = previousNumber / currentNumber
default: break
}
display = String(format: "%g", currentNumber)
operation = nil
}

default:
break
}
}
}

3. 添加清除功能

ContentView 结构内添加:

1
2
3
4
5
6
7
8
9
// 在按钮网格前添加清除按钮
HStack {
CalculatorButton(title: "C") {
display = "0"
currentNumber = 0
previousNumber = 0
operation = nil
}
}

4. 运行效果

1. 点击 **▶** 按钮运行 2. 将显示带网格按钮的计算器界面 3. 支持连续计算:`5 + 3 = 8 → × 2 = 16`

四、项目优化与调试

1. 界面美化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 修改按钮样式
.background(buttonColor(title))
.foregroundColor(buttonTextColor(title))

// 添加颜色函数
func buttonColor(_ title: String) -> Color {
if ["+", "-", "×", "÷", "="].contains(title) {
return .orange
}
return Color.gray.opacity(0.2)
}

func buttonTextColor(_ title: String) -> Color {
return ["+", "-", "×", "÷", "="].contains(title) ? .white : .primary
}

2. 调试技巧

  1. 实时预览:Canvas 面板(⌥⌘↩ 打开)
  2. 控制台输出:⌘⇧C 查看调试信息
  3. 断点调试:在代码行号旁点击添加断点

3. 项目打包

  1. 菜单:Product → Archive
  2. 选择 “Distribute App”
  3. 导出为 “macOS App” 或安装包

五、总结

Swift 语言核心优势:

开发效率:简洁语法减少 40% 代码量(相比 Objective-C)
内存安全:可选类型和 ARC 防止常见内存错误
现代特性:协议扩展、元组、模式匹配
生态系统:与 Apple 平台深度集成

SwiftUI 框架亮点:

  • 声明式语法:UI = f(state)
  • 实时预览:所见即所得开发
  • 跨 Apple 平台:相同代码适配 iOS/macOS/watchOS
  • 响应式设计:自动状态更新

学习路径建议

  1. 掌握基础语法:变量/函数/控制流
  2. 理解可选类型和错误处理
  3. 学习 SwiftUI 数据流(@State/@Binding)
  4. 实践 Combine 框架响应式编程
  5. 探索 Swift 服务端开发(Vapor 框架)