对于Swift的样式匹配,你知道多少呢,这里让bekin简单介绍一些在实际应用中可以让你快速判断一些条件,或者是分支的样式匹配语法,会大大简化你的代码量,话不多说,直接上代码:
1,if let的使用
这个相信大家也用的很多了,这个在判断optional值的时候非常有用,例如判断window的根控制器是不是导航控制器,接下来并且需要用这个导航控制器干点啥的时候,可以这样简写
if let nav = self.window?.rootViewController as? UINavigationController {
///do something
}
if let 可以不仅仅在判断条件成立的时候执行代码,还可以绑定=后面的值到let的常量中,当然把let换成var也是可以的,是不是简便很多,相信很多人会这样用了,接下来说说其他的
2,if case的使用
比如有一个坐标点point (x: 100, y: 0),当你想判断该坐标是不是在原点的时候,以前你的代码或许是这样的:
if point.x == 0 && point.y == 0 {
///do something
}
用样式匹配以后,代码是这样的:
if case (0, 0) = point {
///do something
}
是不是简洁很多,当然配上我们的value binding那就更爽啦,比如现在只想判断这个点在不在y轴,同时还需要用到point的x轴的值,那么可以这样用:
if case(let x, 0) = point {
print("Y轴,X为:\(x)")
}
如果不需要x的值,更可以省略x的值判断了,像这样:
if case(_, 0) = point {
print("在Y轴")
}
这样用起来是不是方便很多
3,switch...case...的用法
还是2里面提到的point,如果同时需要判断在原点,在x轴,在y轴,一起其他情况的时候,我们可以用switc...case
switch point {
case(0,0):
print("原点")
case(_,0):
print("Y轴")
case(0,_):
print("X轴")
default:
print("不在X轴,也不再Y轴")
}
如果要value binding,那就和上面的if case一样
4,for...case的用法
比如有一个数组 nums [1, 2, 3, 4]
当我们判断只要2在里面的时候就干一些事情,当然你可以调用数组的API contains方法,这里不说这个,我们用样式匹配符可以这样:
for case 2 in nums {
print("找到2啦,你可以干一些活啦")
}
不过需要说明的是,如果数组里面有多个元素2,那么这个print将会执行2的count次,也就是说不管有没有找到2,这个for case都会把这个数组for循环完毕,这个大家用的时候需要注意
当然还有更高级的用法,比如numsO [1, 2, 3, nil, 6, nil, 10]这样一个数组,如果要在元素不为空的时候干一些事情,那么你可以这样写:打印结果为:1,2,3,6,10,
for case let n? in numsO {
print(n)
///do something
}
是不是很有意思!!!
5,在if或者是for后面添加where的用法
比如有一个表示电池电量的枚举BatteryPower ,有三种状态,一种是没电了outOfPower,一种是full,另外一种是normal,但是现在需要在normal的基础上根据电量的百分比增加两种状态,一种的低电量状态,另外一种是几乎满电状态,那么可以在switc case的时候加上where来加以限制,代码如下:
enum BatteryPower {
case full, outOfPower
case normal(percent: Double)
}
var battery: BatteryPower = .normal(percent:0.25)
switch battery {
case.full:
print("full power")
case .outOfPower:
print("out of power")
case.normal(let p) where p <= 0.2:
print("almost out of power")
case.normal(let p) where p >= 0.8:
print("almost full power")
default:
print("normal power")
}
当然where不仅仅可以用在switch...case里面,还可以配上for循环,if条件判断使用,例如针对2里面提到的数组nums [1, 2, 3, 4],如果仅仅是在元素的值为偶数的时候需要做一些事情,你可以这样写:这样你就不需要在for循环里面添加if判断了,是不是感觉简化很多了
for n in nums where n %2 == 0 {
print(n)
}
以上局势针对样式匹配符的一些简单介绍和应用
网友评论