Swift: Swift 运算符入门:算术比较逻辑运算符详解零基础教程

运算符是代码中的计算符号——本课带你掌握 Swift 中所有基本运算符的用法和实战技巧。

1. 你将学到


2. 一个财务分析师的真实故事

(1) 痛点:Int 除法丢失小数导致报表错误

Bob 是一家创业公司的财务分析师,需要计算季度收入增长率。他写了一段代码:

SWIFT
let currentRevenue = 250_000
let previousRevenue = 200_000
let growthRate = (currentRevenue - previousRevenue) / previousRevenue * 100
print("增长率:\(growthRate)%")

输出:

TEXT 📖 仅展示
增长率:0%

Bob 知道实际增长率应该是 25%,但代码输出 0%。原因在于 Int 除法会截断小数——50,000 / 200,000 在整数运算中等于 0,乘以 100 还是 0。

(2) 使用 Double 进行精确计算的解法

把数据改为 Double 类型,除法就能保留小数:

SWIFT
let currentRevenue = 250_000.0
let previousRevenue = 200_000.0
let growthRate = (currentRevenue - previousRevenue) / previousRevenue * 100
print("增长率:\(growthRate)%")

输出:

TEXT 📖 仅展示
增长率:25.0%

问题立刻解决。Bob 随后检查了过去 12 个月的报表,发现还有 4 处类似的 Int 除法精度丢失。

(3) 收益:用对运算符后报表准确率

维度 之前 之后
数值计算错误率 每月 3-5 次 0 次
报表审核时间 每次 2 小时 15 分钟
团队信任度 "报告可能不准" "数据可靠"
运算符理解 不清楚 Int 除法行为 能主动选择正确类型

3. 算术与赋值运算符

算术运算符执行数学计算,赋值运算符将值存入变量。它们是 Swift 中使用最频繁的运算符。

100%
graph LR
    A[运算符] --> B["算术: + - * / %"]
    A --> C["赋值: = += -= *= /="]
    B --> D[数字计算]
    C --> E[更新变量值]
运算符 名称 示例 结果
+ 加法 10 + 3 13
- 减法 10 - 3 7
* 乘法 10 * 3 30
/ 除法 10 / 3 3(Int 截断)
% 取余 10 % 3 1

(1) 算术运算符

SWIFT
let a = 15
let b = 4
let sum = a + b      // 19
let diff = a - b     // 11
let prod = a * b     // 60
let quot = a / b     // 3(Int 除法截断小数)
let rem = a % b      // 3(15 / 4 = 3 余 3)
⚠️ 注意: Int 除法会直接截断小数部分,不四舍五入。15 / 4 结果是 3 而不是 3.75。需要小数结果时用 Double。

(2) 复合赋值运算符

复合赋值运算符把算术运算和赋值合并,写法更简洁:

SWIFT
var score = 10
score += 5     // 等价于 score = score + 5 -> 15
score -= 3     // 等价于 score = score - 3 -> 12
score *= 2     // 等价于 score = score * 2 -> 24
score /= 4     // 等价于 score = score / 4 -> 6
复合运算符 含义 示例 等价写法
+= 加并赋值 x += 5 x = x + 5
-= 减并赋值 x -= 3 x = x - 3
*= 乘并赋值 x *= 2 x = x * 2
/= 除并赋值 x /= 4 x = x / 4

▶ 示例:月度支出统计

SWIFT
// ============================================
// 统计月度支出汇总
// 演示算术和复合赋值运算符
// ============================================
var monthlyExpenses = 0.0
let rent = 1200.00
let groceries = 450.50
let transportation = 85.00
let entertainment = 200.00
monthlyExpenses += rent
monthlyExpenses += groceries
monthlyExpenses += transportation
monthlyExpenses += entertainment
let annualExpenses = monthlyExpenses * 12
let weeklyAverage = monthlyExpenses / 4.33
print("月度总支出:$\(monthlyExpenses)")
print("年度总支出:$\(annualExpenses)")
print("周均支出:$\(String(format: "%.2f", weeklyAverage))")

输出:

TEXT 📖 仅展示
月度总支出:$1935.5
年度总支出:$23226.0
周均支出:$447.23

4. 比较与逻辑运算符

比较运算符对两个值进行比较并返回 Bool 结果;逻辑运算符组合多个布尔条件。

100%
graph TB
    A[比较运算符] --> B["== 等于"]
    A --> C["!= 不等于"]
    A --> D["> 大于"]
    A --> E["< 小于"]
    A --> F[">= 大于等于"]
    A --> G["<= 小于等于"]
    B --> H[返回 Bool]
    C --> H
    D --> H
运算符 名称 示例 结果
== 等于 5 == 5 true
!= 不等于 5 != 3 true
> 大于 5 > 3 true
< 小于 5 < 3 false
>= 大于等于 5 >= 5 true
<= 小于等于 5 <= 3 false

(1) 比较运算符

SWIFT
let age = 18
let isAdult = age >= 18     // true
let canDrive = age >= 16    // true
let isSenior = age > 65     // false
let userName = "Alice"
let isAdmin = userName == "Admin"  // false

(2) 逻辑运算符

运算符 名称 含义 示例
&& 两个条件都为 true 才返回 true age >= 18 && hasLicense
` `
! 取反 !isLoggedIn
SWIFT
let hasTicket = true
let isVip = false
let canEnter = hasTicket && isVip   // false
let canAccess = hasTicket || isVip  // true
let isNotVip = !isVip               // true

▶ 示例:用户权限检查

SWIFT
// ============================================
// 检查用户是否有权限访问管理后台
// 演示比较和逻辑运算符
// ============================================
let userAge = 22
let hasVerifiedEmail = true
let isBanned = false
let isAdmin = false
let isAdult = userAge >= 18
let canAccessSystem = isAdult && hasVerifiedEmail && !isBanned
let hasAdminAccess = isAdmin
let finalAccess = canAccessSystem || hasAdminAccess
print("成年:\(isAdult)")
print("已验证邮箱:\(hasVerifiedEmail)")
print("未被封禁:\(!isBanned)")
print("最终访问权限:\(finalAccess)")

输出:

TEXT 📖 仅展示
成年:true
已验证邮箱:true
未被封禁:true
最终访问权限:true

5. 三元运算符与类型转换

三元运算符是 if-else 的简洁写法;数值类型转换让不同数据类型协同计算。

(1) 三元条件运算符

语法:条件 ? 值A : 值B——条件为 true 时返回值A,否则返回值B:

SWIFT
let score = 85
let grade = score >= 60 ? "Pass" : "Fail"
print(grade)  // Pass
写法对比 代码量 可读性
if-else 版本 5 行 清晰但冗长
三元版本 1 行 简洁,适合简单条件
SWIFT
var result: String
if score >= 60 {
    result = "Pass"
} else {
    result = "Fail"
}
let result2 = score >= 60 ? "Pass" : "Fail"
⚠️ 注意: 三元运算符适合简单二选一。条件复杂时请用 if-else。

(2) 数值类型转换

Int 和 Double 之间需要显式转换:

SWIFT
let x = 10       // Int
let y = 3.5      // Double
let result1 = Double(x) + y  // 13.5
let result2 = x + Int(y)     // 13(y 被截断为 3)
转换 语法 结果
Int 转 Double Double(intVal) 保留整数部分,加 .0
Double 转 Int Int(doubleVal) 截断小数,不四舍五入
Int 转 String String(intVal) 转成文本

▶ 示例:折扣计算器

SWIFT
// ============================================
// 根据购买金额计算折扣
// 演示三元运算符和类型转换
// ============================================
let purchaseAmount = 120.0
let itemCount = 3
let discountRate: Double = purchaseAmount >= 100 ? 0.9 : 1.0
let finalAmount = purchaseAmount * discountRate
let averagePrice = finalAmount / Double(itemCount)
print("购买金额:$\(purchaseAmount)")
print("折扣率:\(Int((1 - discountRate) * 100))%")
print("最终金额:$\(finalAmount)")
print("商品数量:\(itemCount)")
print("件均价格:$\(String(format: "%.2f", averagePrice))")
let freeShipping = finalAmount >= 100 ? "Free Shipping" : "Shipping Fee"
print("运费:\(freeShipping)")

输出:

TEXT 📖 仅展示
购买金额:$120.0
折扣率:10%
最终金额:$108.0
商品数量:3
件均价格:$36.00
运费:Free Shipping

6. 完整示例:月度预算分析工具

SWIFT
// ============================================
// 月度预算分析工具
// 功能:演示算术、比较、逻辑、三元运算符
// ============================================
import Foundation
// 1. 收入与支出数据
let salary = 5200.0
let rent = 1400.0
let food = 600.0
let transport = 120.0
let utilities = 200.0
let entertainment = 300.0
// 2. 使用算术和复合赋值计算
var totalExpenses = 0.0
totalExpenses += rent
totalExpenses += food
totalExpenses += transport
totalExpenses += utilities
totalExpenses += entertainment
let savings = salary - totalExpenses
let savingsRate = savings / salary * 100
// 3. 使用比较和三元判断财务状况
let isHealthy = savingsRate >= 20
let advice = isHealthy ? "Healthy" : "Needs Improvement"
// 4. 逻辑判断:单项是否超支
let rentTooHigh = rent > salary * 0.3
let foodTooHigh = food > salary * 0.15
let needsAdjustment = rentTooHigh || foodTooHigh
print("=== Monthly Budget ===")
print("Income: $\(salary)")
print("Expenses: $\(totalExpenses)")
print("Savings: $\(String(format: "%.2f", savings))")
print("Savings Rate: \(Int(savingsRate))%")
print("Status: \(advice)")
print("Needs Adjustment: \(needsAdjustment)")
// 5. 类型转换示例
let categoryCount = 5
let avgPerCategory = totalExpenses / Double(categoryCount)
print("Categories: \(categoryCount), Avg: $\(String(format: "%.2f", avgPerCategory))")

输出:

TEXT 📖 仅展示
=== Monthly Budget ===
Income: $5200.0
Expenses: $2620.0
Savings: $2580.0
Savings Rate: 49%
Status: Healthy
Needs Adjustment: false
Categories: 5, Avg: $524.00

❓ 常见问题

Q Int 除法如何得到小数结果?
A 至少把一个操作数转为 Double。例如 Double(10) / 3 得到 3.3333。或者声明时直接写成 10.0 / 3。
Q % 取余运算符能用于 Double 吗?
A Swift 的 % 只能用于整数。对浮点数取余用 truncatingRemainder(dividingBy:) 方法。
Q && 和 || 有短路求值吗?
A 有。&& 如果左侧为 false 就不再计算右侧;|| 如果左侧为 true 就不再计算右侧。合理利用短路特性可以提升效率。
Q 复合赋值运算符有返回值吗?
A 没有。x += 5 是语句不是表达式,不能用在赋值或比较中。这点和 C 语言不同。

📖 小节


📝 作业

  1. 基础题: 用算术运算符计算一个矩形的面积和周长:长为 12.5,宽为 8.3,输出结果。
  2. 进阶题: 写一个程序判断某年是否为闰年。规则:能被 4 整除但不能被 100 整除,或者能被 400 整除。用逻辑运算符组合条件。
  3. 挑战题: 写一个电费计算器。基础电价 $0.12/kWh,月用电量超过 300kWh 后超出部分按 $0.15/kWh。用三元运算符和算术运算符计算总电费。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏