Swift 流程控制
1、if else
let age = 5 if age<5 { print("age<5") }else if age ==5{ print("age=5") }else{ print("age>5") }
注意:if 后面的小括号可以省略、条件后面的大括号不能省略
if 条件后面只能跟bool类型
2、while
var age = 5 while age > 0 { print("num is \(age)") age-=1 } //输入结果5、4、3、2、1 输出5次
var age = -1 ; repeat { print("age") } while age > 0
repeat while 相当于c语言中的do while
这里不用age-- 是因为从swift3开始,去除了自增(++)、自减(--)运算符
3、for
let name = ["1","2","3","4"] for i in 0..<3{ print(name[i]) } 打印结果 1 2 3 let name = ["1","2","3","4"] let range = 0...3 for i in range { print(name[i]) } 打印结果 1 2 3 4 let name = ["1","2","3","4"] let a = 1 let b = 3 for i in a...b { print(name[i]) } 打印结果 2 3 4 for var i in 1...4{ i += 5 print(i) } 打印结果 6 7 8 9 for _ in 1...3{ print("a") } 打印3次a
a..<b 大于等于a 、小于b
let name = ["1","2","3","4"] for a in name[1...2]{ print(a) } 打印结果 2 ,3 let name = ["1","2","3","4"] for a in name[...2]{ print(a) } //打印 1 2 3 let name = ["1","2","3","4"] for a in name[1...]{ print(a) } ////打印 2 3 4 let name = ["1","2","3","4"] for a in name[..<2]{ print(a) } //打印1 2 let range = 1...3 print(range.contains(5)) false print(range.contains(3)) true print(range.contains(1)) true
4、区间运算
let range = 1...3 let rangOne:ClosedRange<Int> = 1...3 let rangTwo:Range<Int>=0..<6 let rangeThree:PartialRangeThrough<Int> = ...5
let range = "ab"..."cd" print(range.contains("bz")) //true print(range.contains("ff")) // false 字符串、字符也能使用区间运算、但不能用在for in 中 let characterRange:ClosedRange<Character> = "\0"..."~" print(characterRange.contains("G")) //true \0到~囊括了所有可能用到的ASCII字符
5、带间隔的区间值
let hour = 10 let add = 2 //代表从4开始 到10 不包含10 没次增加2 的数据 for trank in stride(from: 4, to: hour, by: add){ print(trank) } //输出 4 6 8
6、switch
var a = 10 switch a { case 1: print("a=1") case 10: print("a=10") default : print("其他") } // case default 后面不能加{} 默认可以不写break、不会贯穿到后面去
var a = 1 switch a { case 1: print("1") fallthrough case 2: print("2") case 3: print("3") default: // print("其他") break } //fallthrough 可以实现贯穿效果 输出 1 、2 //switch 必须保证能处理所有的情况、如果不想做任何事情加一个break即可 enum Answer { case right ,wrong } let an = Answer.wrong switch an{ case .right: print("right") case Answer.wrong: print("wrong") } //这种情况定义一个枚举 、已经处理到了所有的情况、就不需要default了 因为已经知道了an的类型、所以可以省略Answer 直接 .right
switch也支持Character、String 类型
let sring = "tom" switch sring { case "tom": print("tom") default: break } let c:Character = "A" switch c { case "a","A": //等价于 case "a" : print("字母A") fallthrough case "A" print("字母A") default: break }
区间匹配、元组匹配
let age = 11 switch age{ case ..<12: print("小于12") case 12 : print("等于12") default: print("大于12") } let point = ( -21 ,0 ) switch point { case (0,0): print("原点") case (_,0): print("x坐标") case (0,_): print("Y坐标") case (-1...1,-1...1): print("范围内")// x:-1到1 y -1到1 的盒子 default: print("不在范围内") }
值绑定
let p = (1,0) switch p { case (let x ,0): print("x\(x)") case (0,let y): print("y\(y)") default: print("其他") } //输出x1
7、where
let po = (1 , -1) switch po { case let (x,y) where x == y : print("x=y") case let ( x , y ) where x == -y : print("x=-y") default: print("其他") } //输出x=-y
var num = [10,20,-10,-20,-30] var sum = 0 for n in num where n > 0 { sum += n } print(sum) //输出30
8、标签语句
outer : for i in 1...4 { for k in 1...4 { if k==3 { continue outer } if i==3 { break outer } print("i:\(i) k:\(k)") } } //打印结果 i:1 k:1 i:1 k:2 i:2 k:1 i:2 k:2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构