Swift中的模式匹配

机构:深圳达内IT教育 时间:2016-07-27 点击:809

  Swift有一个很好的特性,那就是模式匹配的扩展。模式是用于匹配的规则值,如switch语句的case,do语句的catch子句,以及if、while、guard、for-in语句的条件。

  扩展模式匹配

  Swift的模式匹配是基于~=操作符的,如果表达式的~=值返回true则匹配成功。标准库自带四个~=操作符的重载:一个用于Equatable,一个用于Optional,一个用于Range,一个用于Interval。

  自定义操作符

  回想一开始的想法,以及那段伪代码。理想情况下,我们想用>0和<0取代greaterThan(0)和lessThan(0)。

  自定义操作符存在争议,因为其他读者经常不熟悉这些,它们降低了可读性。回到我们的例子中,类似greaterThan(0)则是完全可读,所以完全可以认为不需要自定义操作符。但同时,每个人都知道>0意味着什么。所以让我们来尝试一下,但正如我们将看到的,它不会很漂亮。

  我们自定义的操作符是一元的——它们只有一个操作数。同时,它们是前置操作符(而不是后置,那种操作符在操作数后的)。在一元操作符和操作数之间不能有空格,因为Swift用空格来区分一元和二元操作符。此外,<不允许用作前置操作符,我们只好用别的东西代替。(>允许前置,但不是允许后置)。

  我建议我们使用~>和~<。虽然~>只是非常像箭头并不理想,但波浪号暗示了模式匹配操作符~=。其他我可以想出的操作符(如>>和<<)则容易造成混淆。

  匹配字符串

  举一个更实际的例子,假设你想要匹配一个字符串的前缀或后缀。我们先写两个方法hasPrefix和hasSuffix,它们接受两个字符串,并检查第一个参数是否是第二个参数的前缀/后缀。这些只是现有标准库中String.hasPrefix和String.hasSuffix方法的变形,只是使参数有一个方便的顺序(前缀/后缀第一,完整的字符串第二)。如果你经常使用Partial Applied Function(偏应用方法,缺少部分参数的方法)并将它们传递给其他方法,你会发现你常常需要重复出现参数来符合被调用方法的参数。

  更多资讯,请访问深圳iOS课程培训学校

下一篇:iOS高效编程
返回顶部