美文网首页
Swift笔记:模式和模式匹配

Swift笔记:模式和模式匹配

作者: Oceanj | 来源:发表于2021-02-18 21:20 被阅读0次

通配符模式

通配符模式用一个_ 下划线匹配或忽略任何字符

gurad let _ = someOptionVal else { return }
for let _ in items {
  // do some thing
}

标识符模式

标识符模式可以匹配任何值,并将匹配的值和一个变量或常量绑定起来。

let someVal = 30

值绑定模式

值绑定模式把匹配到的值绑定给一个常量或变量。

let p = (3, 2)
switch p {
case let (x, y):
    print(x, y)
}

如上面的代码,将p的两个值分别绑定到x和y

元组模式

  1. 元组模式匹配对应的元组内的值,如上面那段代码;
  2. 可以使用类型标注限制匹配的值得类型;如 let (x, y): (Int, Int) = (1,2),中 限定匹配到的元组的每个元素类型必须是Int。
  3. 当元组模式被用于forin语句或变量或常量声明时,它仅可以包含通配符模式,标识符模式,可选模式,或者其他包含这些模式的元组模式。
for (x, 0) in points where y == 0 {
}

上面的代码是错误的,应该写成这样:

for (x, y) in points where y == 0 {
}

枚举用例模式

匹配现有某个枚举的某个用例 一般用case 开头。case语句不仅可以出现在switch语句中,还可以出现在if while guard for-in语句中。

可选项模式

  1. 匹配Optional<Wrapped>枚举在some(Wrapped)中包装的值。
let a: Int? = 40
if case .some(let x) = a {
    print(x)
}
// or
if case let x? = a {
    print(x)
}
  1. 可选模式为forin语句提供迭代数组简便方式,过滤数组中的nil 元素。
let arrays = [nil,1,3, nil, 4]
// 只打印值为非nil的元素。
for case let number? in arrays {
   print(number)
}

类型转换模式

有两种 is 和 as。 is只出现在switch中的case 标签中,is和as模式形式如下:
is 类型
is没有返回类型,as如果匹配成功则返回as值右边的类型
模式 as 类型

for let animal in animals {
     switch animal {
     case let dog as Dog:
     print(dog.name)
     case is Bird:
     print("")
     default:
       break
      }
}

表达式模式

表达式模式代表表达式的值。表达式模式只出现在switch语句中的case标签中。
表达式模式代表的表达式会使用swift标准库中的=运算符与输入表达式的值进行比较,如果=运算符返回true,则匹配成功。默认情况下,~=运算符使用==运算符来比较两个相同类型的值。它也可以将一个整形数值与一个Range实例中的一段整数区间做匹配。

let point = (1, 2)
switch point {
case (0,0):
print("orign.")
case (-2...2, -2...2):
print(point.0, point.1)
default:
print("")
}

可以重载~=来提供自定义的表达式匹配行为。

func ~= (pattern: String, value: Int) -> Bool {
  return pattern == "\(value)"
}
switch point {
  case ("0", "0"):
print("(0,0) is at the origin.")
default:
print(point.0, point.1)
}

自定义类型默认是无法进行表达式模式匹配的,也需要重载~= 运算符。

struct Employee {
    var salary: Float
}
let e = Employee(salary: 9999)

func ~=(lhs: Range<Float>, rhs: Employee) -> Bool {
  return lhs.contains(rhs.salary)
}
switch e {
case 0.0..<1000:
print("艰难生活")
case 1000..<5000:
print("小康社会")
case 5000..<10000:
print("获得很滋润")
default:
break
}

相关文章

  • Swift笔记:模式和模式匹配

    通配符模式 通配符模式用一个_ 下划线匹配或忽略任何字符 标识符模式 标识符模式可以匹配任何值,并将匹配的值和一个...

  • ios 经典面试案例 (七)

    Swift有哪些模式匹配? 模式匹配总结: 1.通配符模式(Wildcard Pattern)如果你在 Swift...

  • Swift 模式和模式匹配

    模式 模式代表单个值或者复合值的结构 模式代表一种值的结构,而不是特定的某个值,你可以利用模式来匹配各种各样的值。...

  • Swift中的模式匹配

    1、模式匹配2、where和模式匹配 1、模式匹配 虽然在Swift中没有内置的正则表达式支持,但是一个和正则表达...

  • Swift-模式匹配

    模式就是匹配的规则,下面介绍Swift中的模式。 1. 通配符模式 _匹配任何值,_?匹配非nil值。 2. 标识...

  • Swift中的模式匹配

    模式匹配 模式匹配是 Swift 中非常常见的一种编程模式,使用模式匹配,可以帮助我们写出简明、清晰以及易读的代码...

  • 在Swift里的自定义模式匹配(译)

    原文地址模式匹配在swift里是随处可见的,虽然switch case是匹配模式最常见的用法,但是Swift有多种...

  • Swift 中的模式和模式匹配

    模式 模式代表单个值或者复合值的结构。 例如,元组(1,2)的结构是由逗号分隔的,包含2个元素的列表。因为模式代表...

  • swift模式匹配

    一、模式 1、什么是模式? 模式是用于匹配的规则,比如switch的case、捕捉错误的catch、if\gura...

  • Swift 模式匹配

    在 Swift 中,使用 ~= 来表示模式匹配的操作符。如果我们看看 API 的话,可以看到这个操作符有下面几种版...

网友评论

      本文标题:Swift笔记:模式和模式匹配

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