Swift 让x在x.hasuffix(“pepper”)中如何工作

Swift 让x在x.hasuffix(“pepper”)中如何工作,swift,swift-playground,Swift,Swift Playground,在下面的代码块中,我无法理解let x where x.hasSuffix(“pepper”) 控制台输出 蔬菜评论:这是一种辛辣的红辣椒吗 似乎以下逻辑正在发生 x = vegetable if (x's suffix == 'pepper') run case 有人能给我解释一下吗?蔬菜是一个隐式的字符串。这和你写的一样: var vegetable: String = "red pepper" hasSuffix声明为func hasSuffix(后缀:String)->Bo

在下面的代码块中,我无法理解
let x where x.hasSuffix(“pepper”)

控制台输出

蔬菜评论:这是一种辛辣的红辣椒吗

似乎以下逻辑正在发生

x = vegetable
if (x's suffix == 'pepper') 
    run case

有人能给我解释一下吗?

蔬菜
是一个隐式的
字符串
。这和你写的一样:

var vegetable: String = "red pepper"
hasSuffix
声明为
func hasSuffix(后缀:String)->Bool
an因此返回一个
Bool
where
关键字指定了额外的要求,并且只能在
switch
语句中使用。
因为所有这些都被覆盖,所以
变量被分配给x(
让x


您可以阅读有关
where
开关的更多信息

在这种情况下,实际上没有理由使用
let x
case let x where x.hasSuffix(“胡椒”):
可以简单地替换为
case vegetar where vegetar.hasSuffix(“胡椒”)
。在这个场景中,声明了一个额外的变量
x
,该变量复制
蔬菜
。这是没有用的,而且arguable会降低可读性,即使您也将
x
重命名为
plate

在switch语句中使用
let
在其他情况下很有用,例如“参数”(蔬菜)不是变量时,例如
switch(getVegetableName())
,或者在“参数”是元组且需要解包的情况下,例如在

let vegetablename和country=(“红薯”、“美国”)
开关(蔬菜名称和国家/地区){
案例(let蔬菜,let国家),其中国家=“坦桑尼亚”:
印刷品(“这种蔬菜来自肯尼亚北部的一个国家”)
凯斯(“红薯”)://注意这里我忽略了这个国家,甚至不用为它创建一个常数
印刷品(“红薯”)
违约:
打印(“我们不在乎这种蔬菜”)
}

看起来像一个内联lamb,我在苹果网站上读到了参考资料,但是有人如何访问切换结果呢?开关是一种功能吗?或者匹配案例中的代码只是运行?(对努奥比的问题感到抱歉)如果改为:vegatable.hasSuffix(“胡椒”)会更有意义
var vegetable: String = "red pepper"