开关条件计算为 Swift 中的常数
Switch condition evaluates to a constant in Swift
我有这个代码
import UIKit
enum menuSituation{
case menuIsOpened
case menuIsClosed
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var currentSituation = menuSituation.menuIsClosed
switch(currentSituation){ //Here is the warning
case .menuIsOpened:
println("Menu is opened")
break
case .menuIsClosed:
println("Menu is closed")
break
}
}
在我开始定义 switch 语句的行中,它给了我警告:
Switch condition evaluates to a constant
我怎样才能摆脱这个警告?
好吧,这基本上意味着开关将始终评估为 menuIsClosed
。你的意思可能是这样的:
var currentSituation = aSituation // That would be a menuSituation (known at runtime)
// Also note that 'break' is not needed in (non-empty) match cases
switch currentSituation {
case .menuIsOpened:
print("Menu is opened")
case .menuIsClosed:
print("Menu is closed")
}
或许你可以这样试试
enum CompassPoint : String {
case North
case South
case East
case West
}
let directionToHead = "West"
switch directionToHead {
case "North":
print("Lots of planets have a north")
case "South":
print("Watch out for penguins")
case "East":
print("Where the sun rises")
case "West":
print("Where the skies are blue")
default :
print("No direction is found")
}
我遇到了同样的问题,解决方案是全局声明:
import UIKit
enum menuSituation{
case menuIsOpened
case menuIsClosed
}
private var currentSituation: menuSituation = .menuIsClosed // globally declaration
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
switch currentSituation {
case .menuIsOpened:
println("Menu is opened")
break
case .menuIsClosed:
println("Menu is closed")
break
}
}
}
通常情况下,将常数值放在括号中会有所帮助。编译器仍然知道它是一个已知值,但假设警告等不是。所以只是
var currentSituation = (menuSituation.menuIsClosed)
我假设这是在开发过程中,你会添加其他情况,否则警告当然是完全合理的,你可以大大简化代码。
我有这个代码
import UIKit
enum menuSituation{
case menuIsOpened
case menuIsClosed
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var currentSituation = menuSituation.menuIsClosed
switch(currentSituation){ //Here is the warning
case .menuIsOpened:
println("Menu is opened")
break
case .menuIsClosed:
println("Menu is closed")
break
}
}
在我开始定义 switch 语句的行中,它给了我警告:
Switch condition evaluates to a constant
我怎样才能摆脱这个警告?
好吧,这基本上意味着开关将始终评估为 menuIsClosed
。你的意思可能是这样的:
var currentSituation = aSituation // That would be a menuSituation (known at runtime)
// Also note that 'break' is not needed in (non-empty) match cases
switch currentSituation {
case .menuIsOpened:
print("Menu is opened")
case .menuIsClosed:
print("Menu is closed")
}
或许你可以这样试试
enum CompassPoint : String {
case North
case South
case East
case West
}
let directionToHead = "West"
switch directionToHead {
case "North":
print("Lots of planets have a north")
case "South":
print("Watch out for penguins")
case "East":
print("Where the sun rises")
case "West":
print("Where the skies are blue")
default :
print("No direction is found")
}
我遇到了同样的问题,解决方案是全局声明:
import UIKit
enum menuSituation{
case menuIsOpened
case menuIsClosed
}
private var currentSituation: menuSituation = .menuIsClosed // globally declaration
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
switch currentSituation {
case .menuIsOpened:
println("Menu is opened")
break
case .menuIsClosed:
println("Menu is closed")
break
}
}
}
通常情况下,将常数值放在括号中会有所帮助。编译器仍然知道它是一个已知值,但假设警告等不是。所以只是
var currentSituation = (menuSituation.menuIsClosed)
我假设这是在开发过程中,你会添加其他情况,否则警告当然是完全合理的,你可以大大简化代码。