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)
}

打印结果 23 

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
复制代码

 

posted @   ZhangShengjie  阅读(197)  评论(0编辑  收藏  举报
编辑推荐:
· .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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示