我有一个枚举:
setMinimumSize(new Dimension(width, height));
setPreferedSize(new Dimension(width, height));
setMaximumSize(new Dimension(width, height));
和这段代码:
enum State {
case FullOpen
case HalfOpen
case Closed
}
我在每个switch语句中都出错:
var stateForConversionView: State!
...
var previousState: State!
if true {
previousState = stateForConversionView!
switch previousState {
case .FullOpen:
stateForConversionView = .HalfOpen
case .HalfOpen:
stateForConversionView = .FullOpen
case .Closed:
stateForConversionView = .HalfOpen
default:
break
}
}
我真的不明白为什么。有人可以解释一下吗?
答案 0 :(得分:125)
这种方式可以正常工作:
if true {
previousState = stateForConversionView
switch previousState! {
case .FullOpen:
stateForConversionView = .HalfOpen
case .HalfOpen:
stateForConversionView = .FullOpen
case .Closed:
stateForConversionView = .HalfOpen
default:
break
}
}
您需要添加!
。
有关详细信息,请参阅THIS。
答案 1 :(得分:1)
如果条件变量属于“状态”的不同类型。您应该使用rawValue属性。
var previousState:String
previousState = stateForConversionView
switch previousState {
case State.FullOpen.rawValue:
stateForConversionView = .HalfOpen
case State.HalfOpen.rawValue:
stateForConversionView = .FullOpen
case State.Closed.rawValue:
stateForConversionView = .HalfOpen
default:break
}
答案 2 :(得分:-1)
您不需要创建临时变量(previousState
)。只需打开您使用的属性作为枚举:
if true {
switch stateForConversionView! {
case .FullOpen:
stateForConversionView = .HalfOpen
case .HalfOpen:
stateForConversionView = .FullOpen
case .Closed:
stateForConversionView = .HalfOpen
default:
break
}
}