我找到了一个解决办法,但这个问题令我烦恼,我想我会分享以防其他人遇到同样的问题.很想知道为什么会这样.在下面的代码中,当它是一个局部变量时,我可以在类初始化程序期间打开枚举.我将枚举值存储到属性中.但是当我尝试在下面的示例中以不同的方法(名为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,BTW.
属性foo不是MyEnum,而是ImplicitlyUnwrappedOptional< MyEnum>又名MyEnum!与许多其他情况不同,switch不会隐式解包它.
你必须手动打开它:
if let foo = foo { switch foo { case .ABC: println("ABC foo") case .DEF: println("DEF foo") case .GHI: println("GHI foo") default: println("no foo") } } else { println("nil foo") }
或用力打开!如果你确定foo不是零,:
switch foo! { case .ABC: println("ABC foo") case .DEF: println("DEF foo") case .GHI: println("GHI foo") default: println("no foo") }
或与ImplicitlyUnwrappedOptional< Enum>匹配原样:
switch foo { case .some(.ABC): println("ABC foo") case .some(.DEF): println("DEF foo") case .some(.GHI): println("GHI foo") default: println("no foo") }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。