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> = ""..."~"

print(characterRange.contains("G")) //true
~囊括了所有可能用到的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
原文地址:https://www.cnblogs.com/ZhangShengjie/p/11239855.html