在本章中,你将学会条件、循环和控制转移语句等控制流的常见使用方法。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
我们新建一个PlayGround
文件,命名为SwiftControl
。
条件语句-if语句
if
条件判断语句是Swift
控制流条件判断语句中最为常见的一种类型,当情况是false
或者true
的时候,业务上会做如何处理,这就需要使用到if
条件判断语句。示例:
// if语句的使用 var message = "" if message.isEmpty { Text("请输入内容") .foregroundColor(Color(UIColor.placeholderText)) .padding(15) }
上述代码中,常出现在TextEditor
多行文本框的场景,由于TextEditor
多行文本框没有提供placeholder
提示文字的修饰符,因此我们自己需要实现提示文字的交互。
当我们TextEditor
多行文本框内文字message
为空,即message.isEmpty
为true
,我们就展示Text("请输入内容")
提示文字。
如果是多条件判断的情况,我们可以使用if-else、if-else if - else
从句来实现。
我们以石头剪刀布的游戏为例:
// 规则判定 if leftNumber == rightNumber { self.winMessage = "平局!" } else if leftNumber == 1 && rightNumber == 2 { self.winMessage = "左边赢了!" } else if leftNumber == 2 && rightNumber == 3 { self.winMessage = "左边赢了!" } else if leftNumber == 3 && rightNumber == 1 { self.winMessage = "左边赢了!" } else { self.winMessage = "右边赢了!" }
上述代码中,我们实现声明好了两个随机数leftNumber
、rightNumber
。
我们定义随机数的范围为1、2、3
对应石头、剪刀、布
,如果两者相等,则双方为平局,如果左边是1石头,右边是2剪刀,或者左边1是剪刀,右边是3布,或者左边是3布,右边是1石头,那么都是左边赢了,除此之外的情况就是右边赢。
PS: 石头剪刀布项目的图片部分来源于网络,如有侵权,请联系删除。
石头剪刀布项目的代码和逻辑部分最终解释权归属于本人。
石头剪刀布项目仅作开源分享案例使用。
条件语句-Switch语句
Switch
语句和if
语句很类似,不过使用起来更加简单。如果我们有若干种情况,且不同情况得出对应的值,这种业务场景下,我们建议使用Switch
语句。示例:
//Switch语句的使用 enum DragState { case dragging case pressing var isDragging: Bool { switch self { case .dragging: return true case .pressing: return false default: print("没有点击也没有拖动") } }
上述代码中,我们声明了一个枚举类DragState
手势拖动的类型,然后我们判断是否是拖动手势。
如果case
是dragging
拖动手势,则返回isDragging
的值为true
。如果case
的值是pressing
点击手势,则isDragging
的值为false
。如果没有点击也没有拖动,那么我们使用default
默认分支,print
输出一段信息。
在实际业务中,特别是Banner
轮播图的交互中,常常就有点击、拖动手势混合使用,这时候我们就可以Switch
语句来实现条件判断的逻辑。
另外,Switch
语句在Swift
的应用和OC
不同,不需要添加break
语句来跳出条件分支,Switch
语句只要匹配到了case
就会自动终止,所以在Swift
语言中,break
语句不是必须的。
循环语句-For-In语句
在上一章数组的遍历中,我们使用了List
和ForEach
循环遍历展示了数组中的数据,这里我们学习下另一种循环的方式For-In
循环。示例:
//For-In语句的使用 var category = ["后端" , "前端", "Android", "iOS" , "人工智能", "开发工具", "代码人生", "阅读"] for categoryItem in category { print("\(categoryItem)") }
上述代码中,我们声明了一个category
类目的变量数组,然后通过For-In
循环的方式遍历所有元素,并输出展示。这里我们使用了categoryItem
类目项目的临时常量,如果在业务的代码中用不到这个常量,我们也可以直接用“_
”代替。
和ForEach
循环的方式类似,我们也可以使用区间操作符作为遍历的对象,示例:
//For-In语句的使用 for index1 in 1...5 { print("\(index1)") } //闭区间 for index2 in 1..<category.count { print("\(index2)") } //半开区间
循环语句-While语句
While
语句更多是做循环判断使用,While
语句会一直循环到满足条件为止不再循环,而对比if
语句,if
是判断一轮内部所有结果后退出。示例:
//While语句的使用 var number1 = 1 var number2 = 10 while number1 <= number2 { number1 += 1 } print("number2小于number1")
上述代码中,我们声明了2
个数字变量,当number1
小于或等于number2
时,number1
自增,直到number2
小于number1
时,系统输出一段文字。
如果我们只想判断一次就结束,不用循环判断,我们可以使用repeat
函数,示例:
//While语句的使用 repeat{ number1 += 1 } while number1 <= number2
上述代码中,number1
在循环判断中只自增了一次,那么输出结果为1
。
控制转移语句-continue语句
在大学C语言
课程中,我们学习过continue
语句,而在Swift
语言中,continue
的逻辑沿用了和其他语言相同
的逻辑,即跳过本次循环,继续执行下一个循环。示例:
//continue语句的使用 var number3 = 1 var number4 = 5 for i in number3...number4 { if i == 2 { continue } print(i) }
上述代码中,我们通过For-In
语句,遍历1~10
的所有数字,再通过if
语句判断遍历循环的元素有没有2
,如果有2
,则跳过2
,继续循环遍历。
最终的结果会打印输出“1、3、4、5
”。
通过continue
语句,我们也可以用来过滤
数组中的特定元素,示例:
//continue语句的使用 var category2 = ["后端" , "前端", "Android", "iOS" , "人工智能", "开发工具", "代码人生", "阅读"] for categoryItem2 in category2 { switch categoryItem2 { case "iOS": continue default: print("\(categoryItem2)") } }
上述代码中,我们遍历category2
数组中所有元素,如果数组中的值为“iOS
”,那么就会跳过,最后输出的结果是“后端、前端、Android、人工智能、开发工具、代码人生、阅读
”。
控制转移语句-break语句
break
语句和continue
语句的功能都是跳出循环,但break
语句不同的是,break
语句是直接终止后面的所有循环了,也就是我只要匹配到值,就不往下走了。示例:
//break语句的使用 var category3 = ["后端" , "前端", "Android", "iOS" , "人工智能", "开发工具", "代码人生", "阅读"] for categoryItem3 in category3 { switch categoryItem3 { case "iOS": break default: print("\(categoryItem3)") } }
以上就是本章的全部内容。
快来动手试试吧!