Перечисление Swift теряет инициализированные значения при установке в качестве свойства?
Я нашел обходной путь, но эта проблема меня раздражает, и я подумал, что поделюсь, если у кого-то возникнет такая же проблема. Хотелось бы знать, почему это происходит. В приведенном ниже коде я могу очень просто включить перечисление во время инициализации класса, когда это локальная переменная. Я сохраняю значение enum в свойстве. Но когда я пытаюсь включить хранимое свойство (с именем foo) в другом методе (с именем bar ()) в приведенном ниже примере - я получаю предупреждения компилятора и ошибку, что члены не распознаются. Кажется, он знает, что 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, кстати.