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