开关条件计算为 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)

我假设这是在开发过程中,你会添加其他情况,否则警告当然是完全合理的,你可以大大简化代码。