适用人群:iOS/macOS开发兴趣
难度:中等
预计学习时间:40-50小时
为什么学 Swift?
| 优势 | 说明 |
|---|
| Apple生态 | iOS/macOS/watchOS/tvOS开发首选 |
| 现代语法 | 安全、快速、表达力强 |
| SwiftUI | 声明式UI框架,开发效率高 |
| 就业 | iOS开发薪资高,需求稳定 |
| 开源 | 可用于服务端(Vapor框架) |
学习路线
第1阶段:基础语法(2周)
├── 变量(let/var)与类型
├── 字符串与集合(Array/Dictionary/Set)
├── 控制流(if/guard/switch/for-in)
├── 函数与闭包(Closure)
├── 可选类型(Optional)
└── 错误处理(do-try-catch)
第2阶段:面向对象(2周)
├── 类与结构体
├── 属性与方法
├── 继承与协议(Protocol)
├── 扩展(Extension)
├── 泛型
└── 枚举(关联值)
第3阶段:iOS开发(3周)
├── SwiftUI基础(View/State/Binding)
├── 布局系统(VStack/HStack/ZStack)
├── 列表与导航(List/NavigationStack)
├── 网络请求(URLSession)
├── 数据持久化(UserDefaults/SwiftData)
└── MVVM架构
第4阶段:实战项目(3周)
├── 天气应用
├── 待办事项
├── 新闻阅读器
└── 社交应用原型
基础语法速查
// 变量
let name = "Swift" // 常量(推荐)
var count = 0 // 变量
let pi: Double = 3.14 // 显式类型
// 字符串
let greeting = "Hello, \(name)!" // 字符串插值
let multi = """
多行字符串
支持换行
"""
// 可选类型
var optional: String? = nil
if let unwrapped = optional {
print(unwrapped) // 安全解包
}
let value = optional ?? "默认值" // Nil合并
// 函数
greet(_ name: String, times: Int = 1) -> String {
return String(repeating: "Hello \(name)! ", count: times)
}
// 闭包
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 } // 简写
let evens = numbers.filter { $0 % 2 == 0 }
let sum = numbers.reduce(0, +)
// 结构体(值类型)
struct Point {
var x: Double
var y: Double
func distance(to other: Point) -> Double {
let dx = x - other.x
let dy = y - other.y
return sqrt(dx * dx + dy * dy)
}
}
// 类(引用类型)
class Animal {
var name: String
init(name: String) { self.name = name }
func speak() -> String { "..." }
}
class Dog: Animal {
override func speak() -> String { "Woof!" }
}
// 协议
protocol Drawable {
func draw()
var description: String { get }
}
struct Circle: Drawable {
var radius: Double
func draw() { print("Drawing circle with radius \(radius)") }
var description: String { "Circle(r=\(radius))" }
}
// 枚举(关联值)
enum NetworkResult {
case success(data: Data)
case failure(error: Error)
case loading
}
// 错误处理
enum AppError: Error {
case notFound
case serverError(String)
}
do {
let data = try fetchData()
} catch AppError.notFound {
print("Not found")
} catch {
print("Error: \(error)")
}
SwiftUI 快速上手
import SwiftUI
struct ContentView: View {
@State private var name = ""
@State private var items = ["Apple", "Banana", "Cherry"]
var body: some View {
NavigationStack {
List {
ForEach(items, id: \.self) { item in
Text(item)
}
.onDelete { indexSet in
items.remove(atOffsets: indexSet)
}
}
.navigationTitle("Fruits")
.toolbar {
Button("Add") {
items.append("New Item")
}
}
}
}
}
推荐资源
| 资源 | 说明 |
|---|
| Swift Playgrounds | Apple官方互动学习 |
| Hacking with Swift | 最佳免费Swift教程 |
| Stanford CS193p | 斯坦福iOS开发课 |
| SwiftUI by Example | SwiftUI代码示例集 |
实战项目建议
- 记账App:SwiftUI + SwiftData
- 天气应用:网络请求 + 地图
- 健康追踪:HealthKit集成
- 照片编辑:Core Image滤镜