枚举案例'...'不是"......"类型的成员

Nic*_*ico 54 ios swift

我有一个枚举:

enum State {
    case FullOpen
    case HalfOpen
    case Closed
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

我在每个switch语句中都出错:

Enum case 'FullOpen' not found in type 'State!'
Enum case 'HalfOpen' not found in type 'State!'
Enum case 'Closed' not found in type 'State!'
Run Code Online (Sandbox Code Playgroud)

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

Dha*_*esh 128

这样它会工作正常:

if true {
    previousState = stateForConversionView

    switch previousState! {
    case .FullOpen:
        stateForConversionView = .HalfOpen
    case .HalfOpen:
        stateForConversionView = .FullOpen
    case .Closed:
        stateForConversionView = .HalfOpen
    default:
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

你需要添加!.

有关更多信息,请参阅此处.

  • >`你需要添加!`<我有兴趣听到*为什么*```作为答案的一部分. (14认同)
  • @DharmeshKheni希望你能否为我澄清一下:如果`previousState`被宣布为unwrapped,为什么他需要再次在`switch`中解包以使其工作?谢谢. (7认同)
  • @Unheilig 你可以通过这个链接喜欢它的原因:http://www.touch-code-magazine.com/swift-optionals-use-let/ (2认同)
  • 作为Unheilig,我也想知道为什么当它被宣布为未包装时,这种明确的展开是必要的.也许@mattt可以向我们解释一下吗? (2认同)
  • 我也很好奇为什么会这样,我在SO上找到了另一个答案 - 想想我会把它链接到这里以防其他人遇到这个解决方案,并想知道为什么看似多余的解包是必要的@pkamb http:// stackoverflow .COM /问题/ 33670991 /为什么-力解包,被要求的功能于个案的-枚举和开关 (2认同)