Ошибка компиляции в Release в Xcode 7 beta 5 в коде Swift

У меня есть следующий код.

class MyClass {
  private var callbacks: [()->()] = []

  func doIt(callback: (()->())?) {
    if let callback = callback {
      callbacks.append(callback)
    }

    // ... other code here
  }
}

Когда я создаю проект в версии, появляется следующая ошибка:

Команда не выполнена из-за сигнала: Abort trap: 6

Утверждение не выполнено: (PAI2-›use_empty() && не должно иметь никаких применений), функция foldInverseReabstractionThunks, файл /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-700.0.52.2/src/swift/lib/SILPasses /SILCombinerVisitors.cpp, строка 549.

При выполнении SILFunctionTransform SIL Combine на SILFunction @TFC11AddCallback7MyClass4doItfS0_FGSqFT_T__T.

Обратите внимание, что ошибка появляется только в Release и только в Xcode 7 beta 5. Код работал в Xcode 7 beta 4.

Демонстрация: https://github.com/exchangegroup/add-callback-demo-ios< /а>

Похоже на ошибку в Swift? Отправил отчет об ошибке в Apple.

Обновлять

Проблема устранена в Xcode 7.0 beta 6 (7A192o).


person Evgenii    schedule 07.08.2015    source источник
comment
AFAIK Xcode 7 Beta 5 содержит несколько (новых) ошибок. Уже есть (официальный) обходной путь для запуска El Capitan. До следующего релиза осталось совсем немного времени.   -  person Fabio Poloni    schedule 07.08.2015


Ответы (1)


У меня была такая же проблема (только бета 5).

Это было то место, где я пытался добавить замыкание к массиву замыканий, это похоже на то же самое для вашего, где у вас есть метод addCallback в вашем классе MyClass.

Как бы глупо это ни было, я получил свой релиз от изменения этого кода:

callbacks.append(newCallback)

к этому

callbacks = callbacks + [newCallback]

person Marcus    schedule 12.08.2015
comment
Интересно, что функция append изменяет существующий массив, в то время как ваш обходной путь создает новый. Похоже, ошибка проявляется только при изменении массива обратных вызовов. - person Evgenii; 12.08.2015
comment
Это исправлено в бета-версии 6, я смог изменить свой код обратно на использование добавления, и он отлично компилируется. - person Marcus; 31.08.2015