从日记中整理出switch和for in。swift的switch比起oc真的是厉害坏了而且for in中的功能也比oc的更加灵活。小作笔记
1.1 swift中swich语句会将一个值与多个可能的模式匹配。然后基于第一个成功匹配的模式来执行合适的代码块,如果想要oc中匹配到case后依旧贯穿接下来的case则要增加fallthough。switch语句一定得是全面的,就是说,给定类型里每一个值都得被考虑到并且匹配到一个switch的case。如果无法提供一个switchcase所有可能的值,你可以定义一个默认匹配所有的case来匹配所有未明确出来的值。这个匹配所有的情况用关键字default标记,并且必须在所有case的最后出现。
1.2 一个case可以区间匹配、元组匹配(_可以匹配所有可能值)、匹配过程中的值绑定、case中增加where来检查是否符合特定要求、复合匹配(多情形共享一个函数)、复合匹配中值绑定。
//区间匹配
let count = 11
switch count {
case 0:
print(0)
case 1..<5:
print(1)
case 6..<12:
print(2)
default:
break
}
输出:2
//元组匹配和任意指定匹配
let point = (1, 1)
switch point {
case (0,0): //指定匹配
print("指定匹配")
case (_,1): //单个匹配
print("x随意")
case (1,_): //单个匹配
print("y随意")
case (-2...2,-2...2): //区间匹配
print("区间匹配")
default:
print("--")
}
输出:x随意。相比于oc在swift中的匹配到后直接跳出匹配
//值绑定匹配
let point = (1, 1)
switch point {
case (0,0): //指定匹配
print("指定匹配")
case (let x,1): //值绑定匹配
print("值绑定x \(x)")
case (1, let y): //值绑定匹配
print("值绑定y \(y)")
case (-2...2,-2...2): //区间匹配
print("区间匹配")
default:
print("--")
}
输出:值绑定x 1
//条件匹配
let point = (1, 1)
switch point {
case (0,0): //指定匹配
print("指定匹配")
case let (x, y) where x==y:
print("条件匹配")
case (let x,1): //值绑定匹配
print("值绑定x \(x)")
case (1, let y): //值绑定匹配
print("值绑定y \(y)")
default:
print("--")
}
输出:条件匹配
//复合匹配加值绑定
let point = (1, 0)
switch point {
case (0,0): //指定匹配
print("指定匹配")
case let (x, y) where x==y:
print("条件匹配")
case (let num,0) , (0, let num): //值绑定匹配
print("复合匹配值绑定 \(num)")
case (1, let y): //值绑定匹配
print("值绑定y \(y)")
default:
print("--")
}
输出:复合匹配值绑定 1
1.3 as和is搭配swith的强大。as在匹配成功后会自动将类型返回给dog,就为Dog类型。is会进行判断但是不会返回。
1.4 使用重载模类型符对表达模式(类)进行匹配
2.1 swift中for in也给我留下了深刻的印象。遍历字典并拆分字典、段遍历、字符、用下划线来取代忽略的值。
//使用元组接受字典遍历
let dic = ["key1":"v1", "key2":"v2", "key3":"v3"]
for (key, v) in dic {
print("\(key) \(v) 字典")
}
输出
key3 v3 字典
key2 v2 字典
key1 v1 字典
//段遍历 半开半闭区间
for i in stride(from: 0, to: 25, by: 5) {
print("\(i) 段遍历")
}
输出:0 段遍历
5 段遍历
10 段遍历
15 段遍历
20 段遍历
//段遍历 闭区间
for i in stride(from: 0, through: 25, by: 5) {
print("\(i) 段遍历")
}
输出:0 段遍历
5 段遍历
10 段遍历
15 段遍历
20 段遍历
25 段遍历
//使用-代替,求三的五次方
let num = 3
let power = 5
var result = 1
for _ in 1...power {
result *= num
}
print(result)
输出 243