Xcode 箱子和开关在swift中

Xcode 箱子和开关在swift中,xcode,swift,Xcode,Swift,在下面所示的代码中,蔬菜多次声明为常量。但是Xcode没有得到一个错误。为什么Xcode成功地编译了它,但没有得到错误信息?设为常数 let​ ​vegetable​ = ​"red pepper" ​switch​ ​vegetable​ { ​case​ ​"celery"​: ​ ​let​ ​vegetableComment​ = ​"Add some raisins and make ants on a log." ​case​ ​"cucumber"​, ​"watercres

在下面所示的代码中,蔬菜多次声明为常量。但是Xcode没有得到一个错误。为什么Xcode成功地编译了它,但没有得到错误信息?设为常数

let​ ​vegetable​ = ​"red pepper"
​switch​ ​vegetable​ {
​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"​):
​    ​let​ ​vegetableComment​ = ​"Is it a spicy ​\(​x​)​?"
​default​:
​    ​let​ ​vegetableComment​ = ​"Everything tastes good in soup."
​}

摘自:苹果公司的《Swift编程语言》

我想你实际上是在说
vegetableComment
被定义为常数,这就是你所困惑的

在Swift中,
开关
语句中的每个
大小写:
块都有自己的词法范围。 这意味着您可以在每个变量中为所有变量命名相同的名称,并且它们不会冲突。几乎就好像它们有不同的功能

同样,您也不能访问其他数据库中的变量。以下是一些例子:

let​ ​vegetable​ = ​"red pepper"
var comment = ""
​switch​ ​vegetable​ {
​case​ ​"celery"​:
​    ​comment​ = ​"Add some raisins and make ants on a log."
    // This is only defined here
    var favoriteVegetable = "celery"

​case​ ​"cucumber"​, ​"watercress"​:
​    ​comment​ = ​"That would make a good tea sandwich."
    // This will be an error, because `favoriteVegetable` is only valid inside the celery case block
    // favoriteVegetable = "either cucumber or watercress"

​case​ ​let​ ​x​ ​where​ ​x​.​hasSuffix​(​"pepper"​):
​    ​comment​ = ​"Is it a spicy ​\(​x​)​?"

    // We can redefine favoriteVegetable here, because it has nothing to do with the one in the celery block
    let favoriteVegetable = "a pepper"

​default​:
​    ​comment​ = ​"Everything tastes good in soup."
​}

// Similarly, we can't access `favoriteVegetable` here
// println(favoriteVegetable)

// This was defined before the switch statement, so we can get the value that was calculated
println(comment)

我假设您实际上是在谈论将
vegetableComment
定义为常量,这就是您所困惑的

在Swift中,
开关
语句中的每个
大小写:
块都有自己的词法范围。 这意味着您可以在每个变量中为所有变量命名相同的名称,并且它们不会冲突。几乎就好像它们有不同的功能

同样,您也不能访问其他数据库中的变量。以下是一些例子:

let​ ​vegetable​ = ​"red pepper"
var comment = ""
​switch​ ​vegetable​ {
​case​ ​"celery"​:
​    ​comment​ = ​"Add some raisins and make ants on a log."
    // This is only defined here
    var favoriteVegetable = "celery"

​case​ ​"cucumber"​, ​"watercress"​:
​    ​comment​ = ​"That would make a good tea sandwich."
    // This will be an error, because `favoriteVegetable` is only valid inside the celery case block
    // favoriteVegetable = "either cucumber or watercress"

​case​ ​let​ ​x​ ​where​ ​x​.​hasSuffix​(​"pepper"​):
​    ​comment​ = ​"Is it a spicy ​\(​x​)​?"

    // We can redefine favoriteVegetable here, because it has nothing to do with the one in the celery block
    let favoriteVegetable = "a pepper"

​default​:
​    ​comment​ = ​"Everything tastes good in soup."
​}

// Similarly, we can't access `favoriteVegetable` here
// println(favoriteVegetable)

// This was defined before the switch statement, so we can get the value that was calculated
println(comment)

我假设您实际上是在谈论将
vegetableComment
定义为常量,这就是您所困惑的

在Swift中,
开关
语句中的每个
大小写:
块都有自己的词法范围。 这意味着您可以在每个变量中为所有变量命名相同的名称,并且它们不会冲突。几乎就好像它们有不同的功能

同样,您也不能访问其他数据库中的变量。以下是一些例子:

let​ ​vegetable​ = ​"red pepper"
var comment = ""
​switch​ ​vegetable​ {
​case​ ​"celery"​:
​    ​comment​ = ​"Add some raisins and make ants on a log."
    // This is only defined here
    var favoriteVegetable = "celery"

​case​ ​"cucumber"​, ​"watercress"​:
​    ​comment​ = ​"That would make a good tea sandwich."
    // This will be an error, because `favoriteVegetable` is only valid inside the celery case block
    // favoriteVegetable = "either cucumber or watercress"

​case​ ​let​ ​x​ ​where​ ​x​.​hasSuffix​(​"pepper"​):
​    ​comment​ = ​"Is it a spicy ​\(​x​)​?"

    // We can redefine favoriteVegetable here, because it has nothing to do with the one in the celery block
    let favoriteVegetable = "a pepper"

​default​:
​    ​comment​ = ​"Everything tastes good in soup."
​}

// Similarly, we can't access `favoriteVegetable` here
// println(favoriteVegetable)

// This was defined before the switch statement, so we can get the value that was calculated
println(comment)

我假设您实际上是在谈论将
vegetableComment
定义为常量,这就是您所困惑的

在Swift中,
开关
语句中的每个
大小写:
块都有自己的词法范围。 这意味着您可以在每个变量中为所有变量命名相同的名称,并且它们不会冲突。几乎就好像它们有不同的功能

同样,您也不能访问其他数据库中的变量。以下是一些例子:

let​ ​vegetable​ = ​"red pepper"
var comment = ""
​switch​ ​vegetable​ {
​case​ ​"celery"​:
​    ​comment​ = ​"Add some raisins and make ants on a log."
    // This is only defined here
    var favoriteVegetable = "celery"

​case​ ​"cucumber"​, ​"watercress"​:
​    ​comment​ = ​"That would make a good tea sandwich."
    // This will be an error, because `favoriteVegetable` is only valid inside the celery case block
    // favoriteVegetable = "either cucumber or watercress"

​case​ ​let​ ​x​ ​where​ ​x​.​hasSuffix​(​"pepper"​):
​    ​comment​ = ​"Is it a spicy ​\(​x​)​?"

    // We can redefine favoriteVegetable here, because it has nothing to do with the one in the celery block
    let favoriteVegetable = "a pepper"

​default​:
​    ​comment​ = ​"Everything tastes good in soup."
​}

// Similarly, we can't access `favoriteVegetable` here
// println(favoriteVegetable)

// This was defined before the switch statement, so we can get the value that was calculated
println(comment)

你认为什么会失败<代码>蔬菜从未重新定义或更改
vegetableComment
被重新声明,但这没关系,因为每个
case
语句都有自己的作用域。对于每个块
​蔬菜评论​。因此,没有错误。让veg{let veg}没有错误。你认为什么会失败<代码>蔬菜
从未重新定义或更改
vegetableComment
被重新声明,但这没关系,因为每个
case
语句都有自己的作用域。对于每个块
​蔬菜评论​。因此,没有错误。让veg{let veg}没有错误。你认为什么会失败<代码>蔬菜
从未重新定义或更改
vegetableComment
被重新声明,但这没关系,因为每个
case
语句都有自己的作用域。对于每个块
​蔬菜评论​。因此,没有错误。让veg{let veg}没有错误。你认为什么会失败<代码>蔬菜
从未重新定义或更改
vegetableComment
被重新声明,但这没关系,因为每个
case
语句都有自己的作用域。对于每个块
​蔬菜评论​。因此,没有错误。让veg{let veg}没有错误。