iOS讲解迷惑--Swift的分支结构和循环

17 篇文章 0 订阅
5 篇文章 0 订阅

if else

//*******************  分支语句  **********************
// if语句的条件必须是bool值 或者bool表达式

// bool值只能用true或者false
let isOrNo = true

if isOrNo {
    print("true")
} else {
    print("false")
}


var count:Int? = nil // "?" 代表可选
count = 20
if count > 0 {
    print(count) // "Optional(20)\n"
    
    // \() 用于拼接变量和字符串
    print("数字 count 是\(count)"); //"数字 count 是Optional(20)\n"
    print("数字 count 是\(count!)"); // "数字 count 是20\n" !代表拆包
} else {
    print(count)
}


// 拼接
let str_pinJie = "数字count是\(count)"//"数字count是Optional(20)"
let str_pinJie2 = "数字count是\(count!)" // "数字count是20", 加了!号 解包

// 也可把 声明变量的表达式 作为条件
if let count1 = count {
    print("OK")
} else {
    print("error")
}
// ps: 分支语句原则上必须保持完整 (有了if 就得有 else)

循环

// ************
// 循环 while
var number = 0
while number < 3 {
    number++
    print("number = \(number)")
}
number


// do while
repeat {
    number++
} while number < 10



// for循环
for (var num = 0; num < 10; num++) {
    print("num = \(num)")
}



// for循环条件可以省略, 但是分号不能省略
// 这是个死循环
//for ; ;  {
//    print("循环")
//}


// for循环的省略机制
//for ; number < 2; {
//    print(number)
//    number++
//}


array
// for ... in 循环, 变量可以不声明, 只作用于循环作用域中
for num2 in array {
    print(num2) //(7 times)
}


var dic = [33 : "value"]
for value in dic {
    print(value) // (33, "value") ,打印出的类型是元组
    
    // 枚举字典的时候获得的将是一个存放了键 值的元组, 可通过元组的取值规范获取内容
    value.0 // 33
    value.1 // "value"
}


// 使用元组枚举字典的时候, 相当于为元组的元素命名, 可作为局部变量使用
for (key, value) in dic {
    print(key) // "33\n"
    print(value) // "value\n"
}


// 占位符 _
// 使用占位符忽略掉不想使用的变量
for (_, value) in dic {
    print(value) // "value\n"
}

for (key, _) in dic {
    print(key)
}

// 区域运算符在循环中的使用
for value in 1..<5 {
    print(value)// (4 times)
}


for value in 1...5 {
    print(value) // (5 times)
}

for value in array[2..<3] {
    print(value)
}

switch case

// 分支....... switch

var point = (2,0)

switch point {
case (0,0):
    print("原点")
case(_, 0):
    print("X轴") // 执行这个分支
    
    // switch case 分支自带有break, 如果想执行下一分支 使用fallthrough
    
    fallthrough //  跳过当前分支, 执行下一个分支的内容, 当前分支也执行
case(0,_):
    print("Y轴")
    
//default:
//    print("其他(象限内)")
   
// 只要case包含所有情况, 可以不使用default
// switch语句必须包含所有的情况分支
case(_, _): //
        print("其他(象限内)")
    
}


// 值绑定
switch point {
case (0, 0) :
    print("原点")
case (let x, 0):
    
    // 把x坐标绑定到 let x上
    // let x 可以显示任意的数
    print("X轴 == \(x)") // "X轴 == 2\n"
    
//  fallthrough不能下降到一个存在一个不确定变量的分支中

    
case (0, let y):
    print("y轴")
default:
    print("象限内")
}


/*
fallthrough下面的那个case不能声明新变量、常量,也就是不能跳转到case后面接var或者let的语句的。

原因是因为fallthrough不会检查where匹配条件,这样便会导致var或者let声明的变量常量无法得到值,所以swift禁止fallthrough到这样的case中。
*/


switch point {
case (0, 0) :
    print("原点")
    // 给绑定的x 添加限定条件
case (let x, 0) where x == 3 || x == 2:
    // where在分支基础上可以添加限定条件 如果想添加多个限定条件的话可以使用 && ||
    
    print("X轴 == \(x)")
    
    //    不能下降到一个存在一个不确定变量的分支中
    //    fallthrough 不能下降到
    
case (0, let y):
    print("y轴")
default:
    print("象限内")
}








// 区间匹配
// switch 与区间运算符的结合使用
var number2 = 20
switch number2 {
case 0...10: // 如果是0 到 10
    print(number2)
//case 11...100: // 20在11 到 100区间 会执行这个分支
    print(number2)
    fallthrough
case 101...200:
    print(number2)
default:
    print(number2)
}


for value in 1...100 {
    print(value)
    if value == 2 {
        break; // 当等于2的时候跳出循环
//        continue; // 跳出等于2的循环, 继续下次循环
    }
}


var tempString = "fdsgafeiourelfhjds"


switch和循环嵌套使用的时候, 如要终止循环需要给循环去个名字, 用这个(break 循环别名)


// 遍历字符串 str.characters

// tempName: 给循环起名字

// for...in循环与switch结合使用的时候 执行break语句,首先被识别为switch分支自带的break. , 如果要想终止循环, 此时需要为循环添加别名, 使用别名进行打断循环的操作

// tempName 是这个循环的别名
tempName: for tempStr in tempString.characters {
    switch tempStr {
        case "a", "e", "i", "o" , "u":
         print(tempStr)
         // 如果元音 打断循环
         //break tempName
    default:
        print(tempStr)
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值