Перечисление Swift с одним случаем вызывает BAD_ACCESS во время выполнения

Я обнаружил странную ошибку в Swift 2.2 на Xcode 7.3 (или это не ошибка, но я делаю что-то не так).

У меня есть перечисление с одним регистром и классом, который принимает это перечисление в качестве параметра инициализатора

enum OneCaseEnum {
    case X
}

class OneEnumWrapper {
    var myVar: OneCaseEnum

    init(v: OneCaseEnum)
    {
        self.myVar = v
    }
}

Теперь, если я запускаю этот код в реальном приложении, то есть где-то в AppDelegate:

let e = OneCaseEnum.X
print(e)
let x = OneEnumWrapper(v: e)
print(x)

Я получил BAD_ACEESS во время выполнения в 3-й строке.

  • Вылетает в Xcode 7.3 (на предыдущих версиях работает нормально).
  • На детской площадке работает ок.
  • Если я добавлю еще один enum case работает нормально
  • Если я отмечу myVar как развернутый, необязательно работает ОК

Я делаю что-то не так или это ошибка Swift/Xcode/compiler/ что-то еще?

1 ответ

Решение

Это определенно ошибка с компилятором. Как ни странно, добавив вторую case на ваш enum работает отлично:

enum OneCaseEnum {
    case X
    case Y
}

class OneEnumWrapper {
    var myVar: OneCaseEnum

    init(v: OneCaseEnum)
    {
        self.myVar = v
    }
}

let e = OneCaseEnum.X
print(e)
let x = OneEnumWrapper(v: e) // no crash
print(x)

Вы можете использовать это в качестве обходного пути, пока этот сбой не будет идентифицирован и исправлен.

rdar: // 25314388

SR-1035

Пример проекта

Другие вопросы по тегам