100 Days of Swift 学习笔记:Day4 吃透 “类型指定”,解决 Swift 数据类型的那些细节问题
继 Day3 掌握四大数据容器后,Day4 把重点放在了 Swift 的 “类型系统” 上 —— 明确指定数据类型、延迟赋值常量、枚举类型匹配,还有一个超实用的数组去重练习。这些内容看似是 “基础细节”,实则是避免代码报错、规范开发习惯的关键。整理了今天的实操代码和踩坑点,新手朋友跟着练能少走很多弯路~
一、核心知识点:主动指定数据类型,避免 “类型歧义”
Swift 是 “强类型语言”,虽然能自动推断类型,但在创建空容器、初始化变量时,主动指定类型能让代码更清晰,还能避免潜在报错。
1. 基础变量 / 常量的类型指定
// 格式:let/var 变量名: 数据类型 = 初始值
let name: String = "SunSun" // 明确指定是 String 类型
var score: Double = 0 // 即使初始值是整数,也指定为 Double(避免后续赋值小数报错)
print("名字:\(name),分数:\(score)") // 输出 名字:SunSun,分数:0.0
为什么要主动指定? 比如 score 如果不指定 Double,Swift 会默认推断为 Int 类型,后续想赋值 95.5 就会报错;提前指定 Double,后续不管赋整数还是小数都没问题。
2. 容器类型的明确指定(数组、字典、集合)
创建数组、字典、集合时,尤其是空容器,必须指定类型(不然 Swift 不知道要存什么数据):
// 1. 数组:[元素类型]
var albums: [String] = ["Red", "Green"] // 字符串数组
var teams: [String] = [String]() // 空字符串数组(必须指定类型)
// 2. 字典:[键类型: 值类型]
var teacher: [String: String] = ["Math": "Mr.Li"] // 键值都是字符串的字典
// 3. 集合:Set<元素类型>
var books: Set<String> = Set(["Book1", "Book2"]) // 字符串集合
⚠️ 踩坑记录:一开始创建空数组写 var teams = [],直接报错!因为 Swift 无法推断空数组的元素类型,必须写成 [String]() 或 Array<String>() 才合法。
二、实用技巧:延迟赋值的常量(先声明,后赋值)
以前以为常量(let)必须在声明时就赋值,今天才知道 —— 可以先声明类型,后续再赋值,但只能赋值一次,既保留了常量的 “不可修改” 特性,又增加了灵活性。
// 1. 先声明常量类型,不赋值
let userName: String
// 2. 后续再赋值(只能赋值一次)
userName = "Player"
// userName = "NewPlayer" // 报错!常量只能赋值一次
print("用户名:\(userName)") // 输出 用户名:Player
适用场景:比如从网络请求获取数据后再给常量赋值,既能确保数据后续不被修改,又能解决 “声明时不知道具体值” 的问题。
三、枚举补充:枚举值与枚举类型的匹配
Day3 学了枚举的基本定义,今天重点理解 “枚举值的类型”—— 每个枚举值都属于枚举本身的类型,而不是字符串或其他类型,这能避免赋值错误。
// 定义枚举(UI 样式:浅色、深色、跟随系统)
enum UIStyle {
case light, dark, system
}
// 创建枚举变量(类型自动推断为 UIStyle)
var style = UIStyle.dark
// style = "dark" // 报错!不能给 UIStyle 类型赋值字符串
// 后续修改也只能用枚举内部的 case
style = .system // 简化写法:类型明确时,可省略枚举名,直接写 .case
print("当前 UI 样式:\(style)") // 输出 当前 UI 样式:system
优势:枚举值的类型被严格限定,不会出现 “传错值” 的情况(比如把 “black” 误传成 “dark”),后续做 UI 样式切换时特别安全。
四、实战练习:数组去重与元素统计
今天的练习超实用 —— 统计数组总元素数和唯一元素数,核心是利用 “集合自动去重” 的特性,一行代码就能实现:
// 1. 定义一个含重复元素的字符串数组
var strings: [String] = ["Sun", "Li", "Tuo", "Zhang", "Sun", "Wang", "Tuo"]
// 2. 统计总元素数:数组 .count
print("数组\"Strings\"的总元素数量:\(strings.count)") // 输出 7
// 3. 统计唯一元素数:把数组转成集合(自动去重),再用 .count
print("数组\"Strings\"的唯一元素数量:\(Set(strings).count)") // 输出 5
原理:集合(Set)不允许重复元素,把数组 strings 转成 Set(strings) 后,重复的 “Sun” 和 “Tuo” 会被自动移除,再统计集合的元素数就是唯一元素的数量。这个技巧后续处理 “标签去重”“用户 ID 去重” 时能直接用!
五、Day4 学习总结:3 个核心收获
- 主动指定类型:创建空容器、需要固定类型的变量时,主动写
: 数据类型,能避免后续赋值报错,代码也更易读; - 延迟赋值常量:
let 变量名: 类型先声明后赋值,兼顾 “不可修改” 和 “灵活赋值”,适合网络请求等场景; - 枚举类型安全:枚举值属于枚举本身的类型,不是字符串 / 数字,能彻底避免传错值的问题;
- 数组去重技巧:
Set(数组).count能快速统计唯一元素数,实战中超实用。
明日计划
Day5 要学 Swift 的“结构化语句”,可以省略很多重复的操作。
更多推荐


所有评论(0)