Xcode Swift在枚举上使用if导致错误无法转换为'_ArrayCastKind';

Xcode Swift在枚举上使用if导致错误无法转换为'_ArrayCastKind';,xcode,swift,Xcode,Swift,我使用的是xcode 6的Beta 3,在对传递到闭包参数中的枚举执行简单的if语句时遇到问题。以下是简单的枚举定义: enum FLSTeslaLoginStatus { case LoggedOut case LoggedIn case LoggingIn case LoginFailed(NSData!, NSHTTPURLResponse!, NSError) } 出现错误的代码是: 正如您所看到的,switch语句工作正常,但是if检查导致了错误。这

我使用的是xcode 6的Beta 3,在对传递到闭包参数中的枚举执行简单的if语句时遇到问题。以下是简单的枚举定义:

enum FLSTeslaLoginStatus {
    case LoggedOut
    case LoggedIn
    case LoggingIn
    case LoginFailed(NSData!, NSHTTPURLResponse!, NSError)
}
出现错误的代码是:

正如您所看到的,switch语句工作正常,但是if检查导致了错误。这只是一些测试代码,所以我通常不会有switch和if语句,但我正在试图找出if语句的错误。我认为这是一个编译器错误


这在Swift 2.0中通过使用“if case”得到了支持。

这也发生在我的枚举示例中,但我使用的是Int type

enum DisplayFunctionKey : Int {
     case Auto, A, B, C, D, E, F, G, H
}

var key : DisplayFunctionKey = .Auto;

if key == .Auto { /* do your stuff */ } // gives error
但是。。。奇怪的是,如果在if语句中使用not运算符并附带else,则它可以工作:

if key != .Auto {} else { /* do your stuff */ } // this works
它有点难看,但比整个交换机房地产多了一行检查。

此时(iOS8 Beta 4),在进行==比较时,您似乎需要对枚举值进行完全质量控制

确定:

if (taskSortOrder == TaskSortOrder.Name) {
    ...
}
错误:“任务排序器”不能转换为“选择器”


您应该对枚举使用switch语句

switch task order {
case .Name:
   ...
default:
   break
}

Swift 2.x允许通过if案例模式匹配:


看起来,若枚举的任何一个实例都有关联的值,则必须使用switch语句对其进行测试。提交错误报告的时间(至少错误消息需要有意义)。将枚举与自身进行比较时也会出现相同的错误。i、 e.
t==t
。奇怪的是,如果我使用快捷方式
.LoggedIn
,我会得到错误,但如果它是完全限定的,则不会得到。几乎可以肯定这是一个bug,请提交一个雷达。凯文,我也会得到同样的错误。如果完全限定,则可以正常工作。开关是访问枚举值的一种方法。例如,“if let”是访问具有关联类型的枚举值的好方法。
switch task order {
case .Name:
   ...
default:
   break
}
if case let .LoggedIn(name,password) = status  {
   print( "\(name) Logged in!" )
}