切换并且在范围内找不到变量
switch and cannot find variable in scope
为什么要在 switch/case 之外创建变量?
例如,此代码将出现错误 Cannot find 'size' in scope
:
func sizeCheckNoVar(value: Int) -> String {
switch value {
case 0...2:
let size = "small"
case 3...5:
let size = "medium"
case 6...10:
let size = "large"
default:
let size = "huge"
}
return size
}
有一个默认条件,AFIK 涵盖了所有选项。
同时这段代码就可以了:
func sizeCheckVar(value: Int) -> String {
var size: String
switch value {
case 0...2:
size = "small"
case 3...5:
size = "medium"
case 6...10:
size = "large"
default:
size = "huge"
}
return size
}
PS 我看到了这个问题 Cannot find variable in scope ,但我想知道 为什么 而不是 如何避免
一对大括号称为作用域.
在 Swift 中(与其他一些语言不同)有一个简单但铁的规则:
在范围内声明的变量 - 在 switch
语句内的特定情况下 - 在其自己的范围内和较低级别可见 - 就像你的第二个例子
它不在范围外的更高层次上可见——就像你的第一个例子。
您甚至可以将 size
声明为常量,因为它保证会被初始化。
func sizeCheckVar(value: Int) -> String {
let size: String
switch value {
case 0...2: size = "small"
case 3...5: size = "medium"
case 6...10: size = "large"
default: size = "huge"
}
return size
}
然而实际上你根本不需要局部变量。立即 return
值
func sizeCheckVar(value: Int) -> String {
switch value {
case 0...2: return "small"
case 3...5: return "medium"
case 6...10: return "large"
default: return "huge"
}
}
旁注:switch
语句中的冒号也是一种范围分隔符,否则您会在第一个示例中遇到有关重新声明变量的错误。
为什么要在 switch/case 之外创建变量?
例如,此代码将出现错误 Cannot find 'size' in scope
:
func sizeCheckNoVar(value: Int) -> String {
switch value {
case 0...2:
let size = "small"
case 3...5:
let size = "medium"
case 6...10:
let size = "large"
default:
let size = "huge"
}
return size
}
有一个默认条件,AFIK 涵盖了所有选项。
同时这段代码就可以了:
func sizeCheckVar(value: Int) -> String {
var size: String
switch value {
case 0...2:
size = "small"
case 3...5:
size = "medium"
case 6...10:
size = "large"
default:
size = "huge"
}
return size
}
PS 我看到了这个问题 Cannot find variable in scope ,但我想知道 为什么 而不是 如何避免
一对大括号称为作用域.
在 Swift 中(与其他一些语言不同)有一个简单但铁的规则:
在范围内声明的变量 - 在
switch
语句内的特定情况下 - 在其自己的范围内和较低级别可见 - 就像你的第二个例子它不在范围外的更高层次上可见——就像你的第一个例子。
您甚至可以将 size
声明为常量,因为它保证会被初始化。
func sizeCheckVar(value: Int) -> String {
let size: String
switch value {
case 0...2: size = "small"
case 3...5: size = "medium"
case 6...10: size = "large"
default: size = "huge"
}
return size
}
然而实际上你根本不需要局部变量。立即 return
值
func sizeCheckVar(value: Int) -> String {
switch value {
case 0...2: return "small"
case 3...5: return "medium"
case 6...10: return "large"
default: return "huge"
}
}
旁注:switch
语句中的冒号也是一种范围分隔符,否则您会在第一个示例中遇到有关重新声明变量的错误。