"where"关键字是什么意思?

Man*_*ani 12 ios swift

我无法理解这句话的确切含义.

let x where x.hasSuffix("pepper")
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

注意:没有必要let使用?这让我感到困惑..这够了x where x.hasSuffix("pepper")吗?因为,let x应该已经被分配了.

更新: 来自@Jacky在这里评论,它可能与下面的含义相同.

let x = vegetable 
if (x.hasSuffix("pepper")
 ......
Run Code Online (Sandbox Code Playgroud)

Rui*_*res 18

where在这方面被用作模式匹配.从示例:

case let x where x.hasSuffix("pepper"):
Run Code Online (Sandbox Code Playgroud)

x匹配的后缀时"pepper",它将设置常量vegetableComment:

let vegetableComment = "Is it a spicy \(x)?"
Run Code Online (Sandbox Code Playgroud)

你也可以看到它x不能是"芹菜","黄瓜"或"水田芥",否则它会给你一个不同的结果:

case "celery":
    let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
    let vegetableComment = "That would make a good tea sandwich."
Run Code Online (Sandbox Code Playgroud)

因为那些案子以前case let x where x.hasSuffix("pepper"):.您可以尝试更改它们的顺序并传递值"celery"以查看不同的结果.

编辑:

根据我的理解,x 如果 x后缀是"胡椒",它会创建一个常量.创建此常量的目的是让您在此之后使用它:

let vegetableComment = "Is it a spicy \(x)?"
Run Code Online (Sandbox Code Playgroud)

编辑2:

经过一番研究,这称为价值绑定,它被描述为:

switch case可以将它匹配的值绑定到临时常量或变量,以便在case的主体中使用.这称为值绑定,因为值"绑定"到案例正文中的临时常量或变量.

摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/gb/jEUH0.l


Eri*_*ele 7

case let x where x.hasSuffix("pepper")
Run Code Online (Sandbox Code Playgroud)

简单的解释是,你不能匹配的情况下,这是一个类型的String,有.hasSuffix()因为它返回一个Bool.因此,他们会为您提供此where模式匹配关键字以供使用.它的工作原理如下:

  1. let x 将传递给开关的String值复制到常量x.
  2. where是一个布尔值的评估,它只会让案例完成匹配,如果给出一个真正的bool,就像一个if块.
  3. hasSuffix()返回所需的bool where.

如果你的字符串变量传入交换机是var foo.你可以改为:

case foo where foo.hasSuffix("pepper")
Run Code Online (Sandbox Code Playgroud)

你可以把一个真正的bool传递到这样的地方,它会工作,无用:

case foo where true
Run Code Online (Sandbox Code Playgroud)