8、Swift 编程中的控制流与函数

Swift 编程中的控制流与函数

在学习编程的过程中,控制流和函数是构建强大应用程序的关键要素。本文将深入探讨 Swift 语言中的控制流语句和函数的使用,帮助你更好地掌握这门编程语言。

1. 基础准备:花括号与圆括号的使用

在 Swift 中,花括号和圆括号的使用规则与其他 C 类语言有所不同。
- 花括号 :在 Swift 里,条件语句和循环必须使用花括号,即使只有一条语句需要执行。例如,以下代码在 Swift 中是无效的:

if (x > y)
  x=0

而正确的写法应该是:

if (x > y) {
  x=0
}

这是因为在其他 C 类语言中,当只有一条语句时,花括号是可选的,这可能会导致许多错误和漏洞,如苹果的 goto fail 漏洞。因此,Swift 强制使用花括号以提高代码的安全性。
- 圆括号 :与其他 C 类语言不同,Swift 中条件表达式周围的圆括号是可选的。例如:

if x > y {
  x=0
}

这种写法在 Swift 中是有效的,但在大多数 C 类语言中则无效。

2. 控制流概述

控制流,也称为控制流程,指的是应用程序中语句、指令或函数的执行顺序。Swift 支持所有常见的 C 类语言控制流语句,包括循环(如 for while )、条件语句(如 if switch )以及控制转移语句(如 break continue )。此外,Swift 还添加了一些额外的语句,如 for-in 循环,并增强了一些现有语句,如 switch 语句。

3. 条件语句

条件语句会检查一个条件,只有当条件为真时才会执行一段代码。Swift 提供了 if if-else 条件语句。
- if 语句 if 语句会检查条件语句,如果为真,则执行代码块。其格式如下:

if condition {
   block of code
}

示例代码:

let teamOneScore = 7
let teamTwoScore = 6
if teamOneScore > teamTwoScore {
    print("Team One Won")
}

在这个例子中,我们首先设置了 teamOneScore teamTwoScore 常量,然后使用 if 语句检查 teamOneScore 是否大于 teamTwoScore 。如果是,则打印 “Team One Won” 到控制台。
- if-else 语句 if-else 语句会检查条件语句,如果为真,则执行一个代码块;如果条件语句为假,则执行另一个代码块。其格式如下:

if condition {
    block of code if true
} else {
    block of code if not true
}

示例代码:

var teamOneScore = 7
var teamTwoScore = 6
if teamOneScore > teamTwoScore {
    print("Team One Won")
} else {
    print("Team Two Won")
}

这个新版本会根据 teamOneScore teamTwoScore 的值打印相应的结果。如果两者相等,上述代码会打印 “Team Two Won”,这显然不太公平。在这种情况下,我们可以使用多个 else if 语句和一个普通的 else 语句,示例如下:

var teamOneScore = 7
var teamTwoScore = 6
if teamOneScore > teamTwoScore {
    print("Team One Won")
} else if teamTwoScore > teamOneScore {
    print("Team Two Won")
} else {
    print("We have a tie")
}
4. 循环语句

循环语句用于在满足条件的情况下重复执行一段代码。Swift 提供了多种循环语句,包括 for 循环和 while 循环。
- for 循环 :Swift 提供了标准的 C 风格 for 循环和 for-in 循环。
- 标准 C 风格 for 循环 :其格式如下:

for initialization; condition; update-rule {
   block of code
}

该循环有三个部分:
- 初始化 :初始化所需的变量,可以包含多个初始化,用逗号分隔。
- 条件 :检查的条件,当条件为假时,循环退出。
- 更新规则 :每次循环结束时需要更新的内容。
示例代码:

for var index = 1; index <= 4; index++ {
    print(index)
}

在这个例子中, index 变量初始化为 1,每次循环检查 index 是否小于等于 4,如果是,则执行代码块并打印 index 的值,最后递增 index 。当 index 大于 4 时,循环退出。
- for-in 循环 for-in 循环用于遍历一个集合或范围,并为集合或范围中的每个项目执行一段代码。其格式如下:

for variable in Collection/Range {
  block of code
}

示例代码:

for index in 1...5 {
    print(index)
}

这个例子使用了闭区间运算符 ... 来遍历从 1 到 5 的数字范围,并打印每个数字。Swift 还提供了半开区间运算符 ..< ,它会遍历范围但不包括最后一个数字,例如:

for index in 1..<5 {
  print(index)
}

使用 for-in 循环遍历数组和字典也非常方便,示例如下:

var countries = ["USA","UK", "IN"]
for item in countries {
    print(item)
}

var dic = ["USA": "United States", "UK": "United Kingdom", "IN":"India"]
for (abbr, name) in dic {
  print("\(abbr) --  \(name)")
}
  • while 循环 :Swift 提供了 while repeat-while 两种形式的 while 循环。
    • while 循环 :先计算条件语句,如果条件为真,则重复执行代码块。其格式如下:
while condition {
  block of code
}

示例代码:

var ran = 0
while ran < 4 {
    ran = Int(arc4random() % 5)
}

在这个例子中, while 循环会不断生成一个 0 到 4 之间的随机数,直到随机数大于等于 4 为止。
- repeat-while 循环 :与 while 循环不同, repeat-while 循环会先执行代码块,然后再检查条件语句。其格式如下:

repeat {
   block of code
} while condition

示例代码:

var ran: Int
repeat {
    ran = Int(arc4random() % 5)
} while ran < 4

在这个例子中,我们可以在循环块内初始化 ran 变量,而不必在循环之前初始化。如果使用 while 循环而不初始化 ran 变量,会导致 “Variable used before being initialized” 异常。

以下是一个简单的流程图,展示了 while 循环的执行过程:

graph TD;
    A[开始] --> B{条件是否为真};
    B -- 是 --> C[执行代码块];
    C --> B;
    B -- 否 --> D[结束];

通过以上内容,我们详细介绍了 Swift 中的控制流语句,包括条件语句和循环语句。这些语句是构建复杂应用程序的基础,掌握它们可以让你更好地控制代码的执行流程。在后续的学习中,我们还将深入探讨函数的使用,以及如何将控制流和函数结合起来,构建更强大的应用程序。

Swift 编程中的控制流与函数

5. 控制转移语句

控制转移语句用于改变代码的执行顺序,Swift 中常见的控制转移语句有 break continue
- break 语句 break 语句用于立即退出当前的循环或 switch 语句。在循环中使用 break 可以提前终止循环的执行。

for index in 1...10 {
    if index == 5 {
        break
    }
    print(index)
}

在上述代码中,当 index 等于 5 时, break 语句被执行,循环立即终止,因此只会打印 1 到 4 的数字。
- continue 语句 continue 语句用于跳过当前循环的剩余部分,并开始下一次循环。

for index in 1...10 {
    if index % 2 == 0 {
        continue
    }
    print(index)
}

在这个例子中,当 index 是偶数时, continue 语句会被执行,跳过 print(index) 语句,直接开始下一次循环,所以只会打印 1、3、5、7、9。

6. 函数

函数是一段完成特定任务的独立代码块。在 Swift 中,函数的定义和使用非常灵活。
- 函数的定义 :函数的基本定义格式如下:

func functionName(parameters) -> returnType {
    // 函数体
    return value
}
  • 无参数无返回值的函数
func sayHello() {
    print("Hello!")
}
sayHello()
  • 有参数有返回值的函数
func addNumbers(a: Int, b: Int) -> Int {
    return a + b
}
let result = addNumbers(a: 3, b: 5)
print(result)
  • 参数标签和参数名称 :在 Swift 中,函数的参数可以有参数标签和参数名称。参数标签用于在调用函数时标识参数,参数名称用于在函数内部使用。
func greet(person name: String) {
    print("Hello, \(name)!")
}
greet(person: "John")

这里 person 是参数标签, name 是参数名称。

7. 函数的使用场景和优势

函数在编程中有很多重要的使用场景和优势,以下是一些常见的方面:
| 使用场景 | 优势 |
| — | — |
| 代码复用 | 可以将常用的代码封装成函数,在需要的地方多次调用,避免代码重复。 |
| 模块化设计 | 把一个大的任务分解成多个小的函数,每个函数负责一个特定的子任务,提高代码的可读性和可维护性。 |
| 提高代码的可测试性 | 可以独立测试每个函数的功能,确保其正确性。 |

8. 控制流与函数的结合使用

在实际编程中,控制流和函数通常会结合使用,以实现更复杂的功能。以下是一个示例,展示了如何结合使用 for 循环和函数来计算数组中所有偶数的和。

func isEven(number: Int) -> Bool {
    return number % 2 == 0
}

var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0
for number in numbers {
    if isEven(number: number) {
        sum += number
    }
}
print("数组中所有偶数的和为: \(sum)")

在这个例子中, isEven 函数用于判断一个数是否为偶数, for 循环遍历数组中的每个元素,使用 if 语句调用 isEven 函数来判断元素是否为偶数,如果是则累加到 sum 中。

以下是一个流程图,展示了上述代码的执行过程:

graph TD;
    A[开始] --> B[初始化数组和 sum 变量];
    B --> C[开始 for 循环];
    C --> D{当前元素是否为偶数};
    D -- 是 --> E[将元素累加到 sum 中];
    E --> F[继续下一次循环];
    D -- 否 --> F;
    F --> G{是否遍历完数组};
    G -- 否 --> C;
    G -- 是 --> H[打印 sum 的值];
    H --> I[结束];

通过以上内容,我们全面介绍了 Swift 中的控制流和函数。控制流语句(条件语句、循环语句、控制转移语句)可以帮助我们控制代码的执行顺序,而函数则可以将代码模块化,提高代码的复用性和可维护性。将控制流和函数结合使用,能够让我们编写出更加高效、灵活和强大的应用程序。希望这些知识能帮助你在 Swift 编程的道路上更进一步。

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
本系统采用微信小程序作为前端交互界面,结合Spring BootVue.js框架实现后端服务及管理后台的构建,形成一套完整的电子商务解决方案。该系统架构支持单一商户独立运营,亦兼容多商户入驻的平台模式,具备高度的灵活性扩展性。 在技术实现上,后端以Java语言为核心,依托Spring Boot框架提供稳定的业务逻辑处理数据接口服务;管理后台采用Vue.js进行开发,实现了直观高效的操作界面;前端微信小程序则为用户提供了便捷的移动端购物体验。整套系统各模块间紧密协作,功能链路完整闭环,已通过严格测试优化,符合商业应用的标准要求。 系统设计注重业务场景的全面覆盖,不仅包含商品展示、交易流程、订单处理等核心电商功能,还集成了会员管理、营销工具、数据统计等辅助模块,能够满足不同规模商户的日常运营需求。其多店铺支持机制允许平台方对入驻商户进行统一管理,同时保障各店铺在品牌展示、商品销售及客户服务方面的独立运作空间。 该解决方案强调代码结构的规范性可维护性,遵循企业级开发标准,确保了系统的长期稳定运行后续功能迭代的可行性。整体而言,这是一套技术选型成熟、架构清晰、功能完备且可直接投入商用的电商平台系统。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
考虑实时市场联动的电力零售商鲁棒定价策略(Matlab代码实现)内容概要:本文围绕“考虑实时市场联动的电力零售商鲁棒定价策略”展开,提出了一种基于鲁棒优化的电力零售定价模型,旨在应对电力市场中可再生能源出力不确定性及实时市场价格波动带来的风险。通过构建两阶段鲁棒优化模型,结合风光出力场景生成负荷聚类分析,充分考虑了电力零售商在日前市场实时市场之间的互动关系,实现了在不确定环境下的最优定价购电决策。文中采用Matlab进行仿真验证,展示了所提策略在提升零售商利润稳定性风险抵御能力方面的有效性。; 适合人群:具备一定电力系统基础知识和优化理论背景,熟悉Matlab编程,从事电力市场、能源管理、智能电网等相关领域研究的研究生、科研人员及行业工程师。; 使用场景及目标:①用于电力零售商在不确定性环境下制定稳健的定价购电策略;②为电力市场风险管理、需求响应建模及新能源集成提供技术支持仿真工具;③支撑学术研究中对鲁棒优化、场景生成、主从博弈等方法的应用复现。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑、场景生成方法求解算法实现,宜配合YALMIP等优化工具包进行调试扩展,以深入理解鲁棒优化在电力市场决策中的实际应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值