小文字 吃饭,睡觉,遛狗头

[swift]不一样的switch/case

img

在java中用switch有不少限制,只能用常量表达式,case必须是常量,如果用枚举类型还要考虑jdk版本。

swift中switch/case显得强大一些特别是case中支持where语句

//switch示例
enum Direction: String {
    case EAST = "东"
    case SOUTH = "南"
    case WEST = "西"
    case NORTH = "北"
}

struct Path {
    var direction : Direction
    var miles : Int
}
//枚举可以省略枚举类型,直接写具体值
let path1 = Path(direction: .EAST, miles: 100)
let path2 = Path(direction: Direction.WEST, miles: 200)

//不需要break,默认是不管穿的
func printPath(path : Path) {
    switch path.direction {
    case Direction.EAST:
        println("向东\(path.miles)")
    case .WEST where path.miles > 150:
        println("向西超出150范围")
    case .WEST:
        println("向西\(path.miles)")
    default://默认是必须的,否则提示错误警告
        println("方向:\(path.direction), 距离:\(path.miles)")
    }
}

printPath(path1)//向东100
printPath(path2)//向西超出150范围
printPath(Path(direction: .WEST, miles: 90))//向西90

上面的case如果用java来写,那么WEST的两个判断需要合并在一起,通过if/else处理。这里的枚举声明页比较简洁,我们直接继承String,不需要显示声明一个额外的成员来保存枚举字符的值。