美文网首页
Swift进阶之样式匹配

Swift进阶之样式匹配

作者: bekin | 来源:发表于2018-07-05 17:50 被阅读0次

对于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)

}

以上局势针对样式匹配符的一些简单介绍和应用

相关文章

网友评论

      本文标题:Swift进阶之样式匹配

      本文链接:https://www.haomeiwen.com/subject/kmmpuftx.html