Swift 教程(从零到上手)
Swift 是 Apple 官方推出的现代编程语言,用于开发 iOS、macOS、watchOS、tvOS 应用。它语法简洁、类型安全、性能高,非常适合初学者和专业开发者。
一、环境准备
1. 安装 Xcode(推荐)
- 下载地址:App Store 或 Apple Developer
- 包含 Swift 编译器、Playground、模拟器、调试器等
2. 在线 Playground(无需安装)
二、Hello World
print("Hello, World!")
在 Playground 中直接运行即可看到输出。
三、基本语法
1. 变量与常量
var name = "张三" // 可变变量
let age = 18 // 不可变常量(推荐使用 let)
name = "李四" // OK
// age = 20 // 错误!常量不可修改
2. 数据类型
| 类型 | 示例 | 说明 |
|---|---|---|
Int | let count = 10 | 整数 |
Double | let pi = 3.14 | 双精度浮点 |
Float | let f: Float = 3.14 | 单精度 |
Bool | let isActive = true | 布尔值 |
String | let greeting = "Hello" | 字符串 |
Character | let letter: Character = "A" | 单个字符 |
Swift 是强类型语言,类型推断非常智能。
四、集合类型
1. 数组(Array)
var fruits = ["苹果", "香蕉", "橙子"]
fruits.append("葡萄")
print(fruits[1]) // 香蕉
print(fruits.count) // 4
2. 字典(Dictionary)
var scores = ["张三": 95, "李四": 88]
scores["王五"] = 70
print(scores["李四"] ?? 0) // 88
3. 集合(Set)
var colors: Set = ["红", "绿", "蓝"]
colors.insert("黄")
五、控制流
1. if 语句
let temperature = 25
if temperature < 0 {
print("很冷")
} else if temperature < 20 {
print("凉爽")
} else {
print("温暖")
}
2. switch 语句(强大!)
let grade = "A"
switch grade {
case "A":
print("优秀")
case "B", "C":
print("良好")
default:
print("需努力")
}
支持区间匹配、元组、where 等高级用法。
let point = (3, 4)
switch point {
case (0, 0):
print("原点")
case (_, 0):
print("x轴")
case let (x, y) where x == y:
print("对角线")
default:
print("其他点")
}
3. for 循环
for i in 1...5 {
print(i)
}
// 遍历数组
for fruit in fruits {
print(fruit)
}
// 带索引
for (index, fruit) in fruits.enumerated() {
print("\(index): \(fruit)")
}
4. while / repeat-while
var n = 5
while n > 0 {
print(n)
n -= 1
}
六、函数
func greet(name: String, age: Int) -> String {
return "你好,\(name),今年 \(age) 岁"
}
let message = greet(name: "小明", age: 20)
print(message)
参数标签
func sayHello(to name: String) {
print("Hello, \(name)!")
}
sayHello(to: "Tom") // 必须写 to
默认参数
func power(_ base: Int, exponent: Int = 2) -> Int {
return Int(pow(Double(base), Double(exponent)))
}
print(power(3)) // 9
print(power(3, 3)) // 27
七、可选类型(Optional)
Swift 的空安全核心机制。
var optionalName: String? = "张三"
optionalName = nil
// 解包方式1:强制解包(危险!)
print(optionalName!)
// 解包方式2:可选绑定(推荐)
if let name = optionalName {
print("名字是 \(name)")
} else {
print("没有名字")
}
// 解包方式3:空合运算符
let displayName = optionalName ?? "匿名"
八、结构体(Struct)
struct Person {
var name: String
var age: Int
func sayHello() {
print("Hi, I'm \(name)")
}
}
var p = Person(name: "小红", age: 16)
p.sayHello()
p.age += 1
结构体是值类型,赋值时会复制。
九、类(Class)
class Car {
var brand: String
var speed = 0
init(brand: String) {
self.brand = brand
}
func accelerate() {
speed += 10
}
}
let myCar = Car(brand: "Tesla")
myCar.accelerate()
类是引用类型,赋值是引用。
十、枚举(Enum)
enum Direction {
case up, down, left, right
}
let move = Direction.up
switch move {
case .up:
print("向上")
default:
print("其他方向")
}
带关联值的枚举
enum Result {
case success(String)
case failure(Error)
}
十一、协议(Protocol)
protocol Drivable {
func drive()
}
struct Bike: Drivable {
func drive() {
print("骑自行车")
}
}
class Truck: Drivable {
func drive() {
print("开卡车")
}
}
十二、扩展(Extension)
extension Int {
func squared() -> Int {
return self * self
}
}
print(5.squared()) // 25
十三、错误处理
enum LoginError: Error {
case wrongPassword
case userNotFound
}
func login(username: String, password: String) throws {
if username.isEmpty {
throw LoginError.userNotFound
}
if password != "123" {
throw LoginError.wrongPassword
}
}
// 使用
do {
try login(username: "", password: "123")
} catch LoginError.userNotFound {
print("用户不存在")
} catch {
print("其他错误")
}
十四、闭包(Closure)
let numbers = [1, 2, 3, 4, 5]
// 完整写法
let doubled = numbers.map({ (n: Int) -> Int in
return n * 2
})
// 简写
let doubled2 = numbers.map { $0 * 2 }
print(doubled2) // [2, 4, 6, 8, 10]
十五、实战小项目:Todo List
struct TodoItem {
var title: String
var isCompleted = false
}
class TodoList {
private var items: [TodoItem] = []
func add(_ title: String) {
items.append(TodoItem(title: title))
}
func toggle(index: Int) {
guard index < items.count else { return }
items[index].isCompleted.toggle()
}
func list() {
for (i, item) in items.enumerated() {
let status = item.isCompleted ? "✓" : "○"
print("\(i). \(status) \(item.title)")
}
}
}
// 使用
let todo = TodoList()
todo.add("学习 Swift")
todo.add("写代码")
todo.toggle(index: 0)
todo.list()
学习资源推荐
| 资源 | 链接 |
|---|---|
| 官方文档 | swift.org |
| Apple 官方教程 | developer.apple.com/tutorials/swift |
| Swift 语言指南(中文) | docs.swift.org/swift-book |
| 视频教程 | B站搜索 “Swift 入门” |
| Playground 练习 | Swift Playgrounds App |
结语
你已经掌握了 Swift 的核心语法!接下来建议:
- 用 Playground 多写小例子
- 尝试用 SwiftUI 做简单 App
- 参与开源项目或写自己的小工具
坚持练习,每日 30 分钟,1 个月后你就能开发自己的 iOS App!
需要 SwiftUI 教程 或 iOS 项目实战?告诉我,我继续带你飞!🚀