1. Swift 简介
Swift 是 Apple 推出的一种编程语言,专为 iOS、macOS、watchOS 和 tvOS 设计。Swift 安全、快速且简洁,提供现代化的语法和强大的编程特性。
print("Hello, Swift!")
注意事项:Swift 的类型安全性较高,确保类型一致非常重要。例如,let
声明的常量一旦赋值不可修改,var
变量允许修改,需清晰区分。
2. 变量与常量
Swift 中的变量用 var
声明,常量用 let
声明。变量的值可以修改,而常量一旦设定不可更改。
var age = 25
let name = "Alice"
注意事项:如果尝试修改常量(如 let
声明的 name
),会导致编译错误。确保在代码中合理使用变量和常量,以避免潜在的错误。
3. 数据类型
Swift 提供了多种数据类型,如整数(Int
)、浮点数(Double
)、字符串(String
)和布尔值(Bool
)。
var height: Double = 1.75
var isStudent: Bool = true
注意事项:Swift 的类型检查严格,因此不同类型的变量不能直接赋值,如 Int
类型的变量不能直接赋值给 Double
类型变量,除非显式转换。
4. 条件语句
Swift 使用 if
、else if
和 else
实现条件判断。条件表达式必须是布尔类型。
let score = 88
if score >= 90 {
print("优秀")
} else if score >= 80 {
print("良好")
} else {
print("一般")
}
注意事项:Swift 中的条件语句需要布尔类型表达式。与其他语言不同,非布尔类型(如整数)不能直接用于条件判断。
5. 循环语句
Swift 支持 for-in
、while
和 repeat-while
循环。
for i in 1...5 {
print(i)
}
注意事项:在 for-in
循环中,如果不需要遍历的值,可以使用下划线(_
)代替变量名。此外,确保 while
和 repeat-while
循环能在条件不满足时退出,以免进入死循环。
6. 函数
Swift 使用 func
关键字定义函数,支持带参数和返回值的函数。
func greet(name: String) -> String {
return "Hello, \\(name)!"
}
注意事项:在定义函数时,可以为参数设置默认值。注意函数调用时参数顺序和类型必须匹配函数定义。
7. 类与结构体
Swift 支持类和结构体。类是引用类型,而结构体是值类型。
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
注意事项:类和结构体的区别在于,类是引用类型(传递时引用相同对象),而结构体是值类型(传递时创建新的副本)。使用结构体时需注意值的不可变性。
8. 闭包
闭包是自包含的代码块,能够在代码中传递并被执行。
let add = { (a: Int, b: Int) -> Int in
return a + b
}
print(add(3, 5))
注意事项:使用闭包时,可以省略参数类型和返回值。注意闭包捕获值的方式(值捕获或引用捕获),尤其在异步编程中。
9. 错误处理
Swift 使用 do-catch
结构进行错误处理。定义错误类型需要遵循 Error
协议。
enum FileError: Error {
case notFound
case unreadable
}
func readFile() throws {
throw FileError.notFound
}
do {
try readFile()
} catch FileError.notFound {
print("文件未找到")
} catch {
print("未知错误")
}
注意事项:在使用错误处理时,try
关键字需放在可能抛出错误的代码前。确保在错误类型定义时实现 Error
协议。
10. 泛型
泛型使代码更加灵活,允许对不同类型的数据执行相同的操作。
func swapTwoValues(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
注意事项:泛型在类型不确定的情况下使用。需确保泛型在调用时类型一致,否则会导致编译错误。
11. 协议与扩展
协议定义了方法和属性的蓝图,扩展为现有类型添加功能。
protocol Describable {
func describe() -> String
}
extension Int: Describable {
func describe() -> String {
return "This is number \\(self)"
}
}
注意事项:协议不能包含实现代码,只定义方法和属性。扩展不应重写类本身已有的方法,否则容易产生逻辑错误。
12. 异步编程
Swift 支持异步编程,通过 async
和 await
来实现。
func fetchData() async -> String {
return "数据已获取"
}
Task {
let data = await fetchData()
print(data)
}
注意事项:在异步编程中,确保代码的执行顺序和数据的同步。注意 async
方法的返回类型必须是 await
。