本篇目标
掌握 Swift 中变量与常量的声明方式,理解基本数据类型,学会类型推断与类型注解,能正确选择 var 与 let。
一、变量与常量
Swift 用 var 声明变量,用 let 声明常量。
var name = "Swift" // 变量,可以修改
let version = 5.9 // 常量,不可修改变量:值可以改变。
var count = 0
count = 1
count = 2
print(count) // 输出 2常量:值一旦赋值,不能修改。
let pi = 3.14159
// pi = 3.14 // 报错:Cannot assign to value: 'pi' is a 'let' constant选择原则:
默认用
let,除非确定需要修改。需要修改时用
var。编译器会提示不必要的
var。
二、类型推断与类型注解
类型推断:Swift 会根据初始值自动推断类型。
let name = "Swift" // 推断为 String
let year = 2014 // 推断为 Int
let price = 9.99 // 推断为 Double
let isOpen = true // 推断为 Bool类型注解:显式声明类型。
let name: String = "Swift"
let year: Int = 2014
let price: Double = 9.99
let isOpen: Bool = true什么时候用类型注解:
初始值无法推断类型时
想明确类型时
声明时不赋值,稍后赋值时
var score: Int
score = 100三、基本数据类型
整数 Int
let age: Int = 30
let count: Int = -5
let maxInt: Int = Int.max
let minInt: Int = Int.min不同位数的整数:
let a: Int8 = 127
let b: Int16 = 32767
let c: Int32 = 2147483647
let d: Int64 = 9223372036854775807进制表示:
let decimal = 17 // 十进制
let binary = 0b10001 // 二进制
let octal = 0o21 // 八进制
let hex = 0x11 // 十六进制数字分隔符(提高可读性):
let bigNumber = 1_000_000
let phone = 138_0000_0000浮点数 Double 与 Float
let pi: Double = 3.14159
let rate: Float = 0.5Double:64 位,精度高,默认浮点类型
Float:32 位,精度低,占用小
let a = 3.14 // 默认推断为 Double
let b: Float = 3.14 // 显式声明 Float布尔 Bool
let isTrue: Bool = true
let isFalse: Bool = false字符串 String
let name: String = "Swift"
let greeting = "Hello, \(name)!" // 字符串插值多行字符串:
let text = """
这是第一行
这是第二行
这是第三行
"""字符串常用操作:
let str = "Hello"
print(str.count) // 5
print(str.isEmpty) // false
print(str.uppercased()) // HELLO
print(str.lowercased()) // hello
print(str.hasPrefix("He")) // true
print(str.hasSuffix("lo")) // true字符 Character
let letter: Character = "A"四、类型转换
Swift 是强类型语言,不同类型不能直接运算。
整数与浮点数转换:
let intValue = 10
let doubleValue = 3.14
let result = Double(intValue) + doubleValue // 13.14
let result2 = intValue + Int(doubleValue) // 13字符串与数字转换:
let str = "123"
let num = Int(str) // Optional(123)
let num2 = Int("abc") // nil
let number = 456
let str2 = String(number) // "456"注意:
Int("abc")返回可选类型,可能为 nil转换可能失败,需要用可选类型处理
五、类型别名
用 typealias 给类型起别名:
typealias UserID = Int
let id: UserID = 1001用途:
让代码语义更清晰
简化复杂类型
typealias Completion = (Bool, String) -> Void六、元组 Tuple
元组可以把多个值组合成一个复合值。
let person = ("Tom", 25)
let person2 = (name: "Tom", age: 25)访问元组元素:
let person = (name: "Tom", age: 25)
print(person.name) // Tom
print(person.age) // 25
let (name, age) = person
print(name) // Tom
print(age) // 25用途:
函数返回多个值
临时组合数据
七、避坑指南
默认用 let:只有需要修改时才用 var。
类型推断不等于弱类型:Swift 仍然是强类型语言。
整数溢出:使用
&+等溢出运算符,或用更大类型。浮点数精度:涉及金钱计算建议用 Decimal。
字符串索引:Swift 字符串不能用整数下标,需要用
String.Index。可选类型:转换可能失败时返回可选类型,不要强行解包。
字符串插值必须用半角括号:\(值) 的右括号必须是英文 ),写成中文全角 )会让编译器认为字符串没有结束,直接报 Unterminated string literal。中文输入法下极易踩到,而且报错位置往往指不出真正原因。
八、检查清单
[ ] 能区分 var 与 let
[ ] 能使用类型推断与类型注解
[ ] 掌握 Int、Double、Bool、String 基本用法
[ ] 能进行类型转换
[ ] 会使用 typealias
[ ] 了解元组的用法