首页 / Swift 编程语言教程 / 基本数据类型

Swift 编程语言教程

基本数据类型

本教程共 93 篇 · 第 9 篇 · 更新于 2026-08-08 · 约 8 分钟阅读

SwiftSwift 编程语言教程IntUIntDoubleFloatBool基本数据类型

本节目标:读完你能说清 Swift 里整数、浮点、布尔各自是什么,并知道日常应该优先选 Int 和 Double。

程序处理的”值”有不同类型。Swift 把基础数值类型分得清清楚楚,你按场景选合适的即可。这一章把最常用的几个摆出来:整数、无符号整数、浮点数、布尔值。

1-1 整数 Int 与 UInt

整数是没有小数部分的数字,比如 42-23。Swift 的整数分”有符号”(可正可负可零)和”无符号”(只能非负)。

最常用的整数类型是 Int。它的大小跟随当前平台:在 64 位平台上,Int 就是 64 位,能表示大约负 90 亿亿到正 90 亿亿的范围,绝大多数场景都够用。

let age: Int = 30
let temperature = -5   // 推断为 Int

还有 UInt,是无符号整数,大小同样跟随平台。但官方建议:除非明确需要”非负且要占满平台位宽”,否则一律用 Int,哪怕你存的值确定是正的。Int 更统一,和其他整数混算时不用来回转换。

1-2 固定大小的整数

除了跟随平台的 Int,Swift 还有固定位宽的整数:Int8Int16Int32Int64,以及对应的 UInt8UInt16 等。名字里的数字就是位数。

比如 UInt8 占 8 位,范围是 0 到 255;Int8 是 -128 到 127。当你和外部数据打交道(比如网络协议、二进制文件格式)必须用特定位宽时,才用它们。

let small: UInt8 = 255   // OK
let tooBig: UInt8 = 256  // 错误:超出 UInt8 范围

这类显式大小类型主要价值是”精确匹配外部约束”和”文档化数据性质”。日常计数、下标,用 Int 就好。

1-3 整数的边界

每种整数类型都有自己的最大最小值,可以通过 minmax 属性拿到:

let minByte = UInt8.min   // 0
let maxByte = UInt8.max   // 255

如果你算出一个超出类型范围的结果,Swift 默认会直接停下程序,而不是存一个错误的值悄悄继续。这叫”溢出检查”,是安全机制的一部分。确有特殊需求想允许溢出时,有专门的溢出运算符(以后讲),但默认是保护你的。

1-4 浮点数 Double 与 Float

浮点数是带小数部分的数字,比如 3.14159-273.15。Swift 主要用两种:Double(64 位)和 Float(32 位)。

日常首选 Double。原因有二:一是它精度更高、范围更大;二是 Swift 推断浮点字面量时默认就是 Double

let pi = 3.14159          // Double
let precise: Double = 2.71828
let lowPrecision: Float = 1.5

浮点数有个关键特性:它不能精确表示范围内的每一个值。比如用 Float 存 10000,下一个能表示的数已经是 10000.001,中间的值会被四舍五入。这和整数”算出来一定准”不同。所以涉及钱的精确计算、需要逐位相等的场景,要格外小心,必要时用整数按”分”来计数。

1-5 布尔值 Bool

布尔类型只有两个值:truefalse。它用来表达”是非""开关""成立不成立”。

let orangesAreOrange = true
let turnipsAreDelicious = false

布尔值最常见的舞台是条件判断,比如 if 语句。Swift 的类型安全在这里很较真:它不允许拿非布尔值冒充布尔。比如 let i = 1; if i { } 在 Swift 里会报错,你必须写成 if i == 1 这种能产生 Bool 的比较。

if turnipsAreDelicious {
    print("好吃")
} else {
    print("不好吃")
}
Tip

给布尔变量起名时,尽量用”是不是”的口吻,比如 isLoggedInhasError,读起来像自然语言,后面写 if hasError 时也顺。

1-6 该选哪个类型的速查

日常整数用 Int;需要精确位宽或对接外部数据才用 Int8 等。日常小数用 Double;明确要省内存或对接 GPU 数据才用 Float。对错、开关用 Bool。无符号 UInt 几乎不主动用,除非你要占满位宽且确定非负。

这个选择原则贯穿你整个 Swift 生涯:用最通用、最不会出意外的类型(Int、Double),特殊需求才下沉到具体类型。一致性比微优化重要。

1-7 数字字面量的写法花样

给整数赋值时,除了十进制,还能写二进制(0b)、八进制(0o)、十六进制(0x)前缀,它们的值相同只是写法不同:

let decimal = 17
let binary = 0b10001
let octal = 0o21
let hex = 0x11

为了让大数字好读,还能插入下划线:let oneMillion = 1_000_000。下划线和前导零都不影响实际值,纯粹为了人眼舒服。

1-8 选类型的默认建议

选类型这件事,Swift 给的默认建议很明确:整数用 Int,小数用 Double,除非有特殊理由才下沉到具体位宽或 Float。一致性比微优化重要——整个代码库统一用 Int,能少很多类型转换的摩擦。

为什么 UInt 不推荐主动用?因为它和 Int 混算时要来回转换,反而添乱。只有当你”确实要占满平台位宽且确定非负”(比如和某个底层格式对接)才用它。日常计数、下标、标志位,统统 Int

浮点数的精度陷阱必须绷根弦。浮点不能精确表示范围内的每个值,用 Float 存 10000,下一个能表示的数已是 10000.001。涉及钱的精确计算,别直接用浮点相减比相等,更稳妥的做法是用整数按”分”计数。比如金额存成 1990 表示 19.90 元,展示时再除 100。

布尔值 Bool 只认 true/false,Swift 不让别的类型冒充它。写 if score == 60 而非 if score(后者在 Swift 直接报错)。给布尔变量起”是不是”的口吻(如 isReady),条件读起来像自然语言,这点在写复杂 if 时特别舒服。

数字字面量的下划线和前缀是可读性小技巧:1_000_000 一眼看出一百万,0x1F 表达十六进制。它们不改值,只为照顾人眼。初学不必强记所有进制,知道有这写法、需要时查即可。类型选对、边界留心,基础数值你就驾驭住了。

1-9 补记:整数除与浮点除

再补充一点:整数相除和浮点相除行为不同。10 / 3 得到 3(整数整除,小数被丢),而 10.0 / 3.0 得到 3.333...。新手常在这里出错——想要小数结果,参与运算的数里得有浮点。如果想把整数相除变小数,先转成 Double 再算。这个小细节在写计算逻辑时格外容易踩,提前记住能省一次调试。

1-10 小结

Swift 基础数值类型里,整数有跟随平台的 Int 和固定位宽的 Int8/16/32/64,无符号对应 UInt 系列;浮点有 Double(默认、精度高)和 Float(省空间);布尔是 Bool(true/false)。日常请默认用 IntDouble,一致性最好、坑最少。整数越界会被拦下,浮点有精度取舍。下一章我们看字符串与字符——你之前已经多次用到的文本类型。