Enum case' ...'不属于' ...'

时间:2015-06-27 06:35:11

标签: ios swift

我有一个枚举:

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
    }
}

我真的不明白为什么。有人可以解释一下吗?

3 个答案:

答案 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
    }
}