我无法理解这句话的确切含义.
let x where x.hasSuffix("pepper")
这是什么意思?
注意:没有必要let
使用?这让我感到困惑..这够了x where x.hasSuffix("pepper")
吗?因为,let x
应该已经被分配了.
更新: 来自@Jacky在这里评论,它可能与下面的含义相同.
let x = vegetable if (x.hasSuffix("pepper") ......
Rui Peres.. 18
的where
在这方面被用作模式匹配.从示例:
case let x where x.hasSuffix("pepper"):
当x
匹配的后缀时"pepper"
,它将设置常量vegetableComment
:
let vegetableComment = "Is it a spicy \(x)?"
你也可以看到它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."
因为那些案子以前case let x where x.hasSuffix("pepper"):
.您可以尝试更改它们的顺序并传递值"celery"以查看不同的结果.
编辑:
根据我的理解,x
如果 x
后缀是"胡椒",它会创建一个常量.创建此常量的目的是让您在此之后使用它:
let vegetableComment = "Is it a spicy \(x)?"
编辑2:
经过一番研究,这称为价值绑定,它被描述为:
switch case可以将它匹配的值绑定到临时常量或变量,以便在case的主体中使用.这称为值绑定,因为值"绑定"到案例正文中的临时常量或变量.
摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/gb/jEUH0.l
的where
在这方面被用作模式匹配.从示例:
case let x where x.hasSuffix("pepper"):
当x
匹配的后缀时"pepper"
,它将设置常量vegetableComment
:
let vegetableComment = "Is it a spicy \(x)?"
你也可以看到它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."
因为那些案子以前case let x where x.hasSuffix("pepper"):
.您可以尝试更改它们的顺序并传递值"celery"以查看不同的结果.
编辑:
根据我的理解,x
如果 x
后缀是"胡椒",它会创建一个常量.创建此常量的目的是让您在此之后使用它:
let vegetableComment = "Is it a spicy \(x)?"
编辑2:
经过一番研究,这称为价值绑定,它被描述为:
switch case可以将它匹配的值绑定到临时常量或变量,以便在case的主体中使用.这称为值绑定,因为值"绑定"到案例正文中的临时常量或变量.
摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/gb/jEUH0.l
case let x where x.hasSuffix("pepper")
简单的解释是,你不能匹配的情况下,这是一个类型的String
,有.hasSuffix()
因为它返回一个Bool
.因此,他们会为您提供此where
模式匹配关键字以供使用.它的工作原理如下:
let x
将传递给开关的String值复制到常量x.
where
是一个布尔值的评估,它只会让案例完成匹配,如果给出一个真正的bool,就像一个if
块.
hasSuffix()
返回所需的bool where
.
如果你的字符串变量传入交换机是var foo
.你可以改为:
case foo where foo.hasSuffix("pepper")
你可以把一个真正的bool传递到这样的地方,它会工作,无用:
case foo where true