【发布时间】:2015-03-20 04:23:28
【问题描述】:
我找到了解决方法,但这个问题让我很烦恼,我想我会分享一下,以防其他人遇到同样的问题。很想知道为什么会这样。在下面的代码中,当枚举是局部变量时,我可以在类初始化程序期间很好地打开枚举。我将枚举值存储到一个属性中。但是,当我尝试在下面的示例中以不同的方法(名为 bar())打开存储的属性(名为 foo)时 - 我收到编译器警告和成员无法识别的错误。似乎知道 foo 是 MyEnum 类型,但不知道 .ABC、.DEF 和 .GHI 是成员。
enum MyEnum {
case ABC, DEF, GHI
}
class MyClass : NSObject {
var foo : MyEnum!
convenience init(foo: MyEnum) {
self.init()
self.foo = foo
switch foo {
case .ABC: println("ABC foo")
case .DEF: println("DEF foo")
case .GHI: println("GHI foo")
default: println("no foo")
}
}
func bar() {
switch foo {
case .ABC: println("ABC foo")
case .DEF: println("DEF foo")
case .GHI: println("GHI foo")
default: println("no foo")
}
}
}
解决方法是:
switch foo as MyEnum { }
或者在方法中声明一个局部变量,比如
let x : MyEnum = foo
switch x { }
再次,很高兴我找到了解决方法,但我很想知道这是否是预期的行为,或者是否需要向 Apple 提交雷达。这是 Xcode 6.2,顺便说一句。
【问题讨论】:
-
原因是
MyEnum和MyEnum!是不同的类型。看到这个:stackoverflow.com/questions/24018327/…要么你必须在bar()中解开foo,或者使用普通属性(而不是隐式解包)。
标签: swift enums switch-statement