Быстрое использование, если на перечислении, приводящем к ошибке, не конвертируемой в '_ArrayCastKind'

Я использую бета-версию 3 xcode 6, и у меня проблема с простейшей операцией if против перечисления, переданного в аргумент закрытия. Вот простое определение перечисления:

enum FLSTeslaLoginStatus {
    case LoggedOut
    case LoggedIn
    case LoggingIn
    case LoginFailed(NSData!, NSHTTPURLResponse!, NSError)
}

И код с ошибкой:

enter image description here

Как вы можете видеть, оператор switch работает нормально, но проверка if приводит к ошибке. Это всего лишь некоторый тестовый код, поэтому у меня обычно не будет оператора switch и if, но я пытаюсь выяснить, что случилось с оператором if. Я думаю, что это ошибка компилятора.

Это поддерживается в Swift 2.0 с использованием "if case".

Ответы

Ответ 2

В это время (iOS8 Beta 4) вам кажется, что вам нужно полностью качественно присвоить значение перечисления при сравнении ==.

OK

if (taskSortOrder == TaskSortOrder.Name) {
    ...
}

Ошибка: "TaskSortOrder" не конвертируется в "Селектор"

if (taskSortOrder == .Name) {
    ...
}

Ответ 3

Это также происходит в моем примере перечисления, но я использую тип Int

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 с сопроводительным другим, он работает:

if key != .Auto {} else { /* do your stuff */ } // this works

Это своего рода уродливое, но, скорее, еще одно, чем вся недвижимость для переключения всего на одну линию.

Ответ 4

Вы должны использовать оператор switch с перечислениями.

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