Подтвердить что ты не робот

Проблема с автоопределением Xcode 8 [_SwiftValue nsli_superitem]

Преобразование моего кода в Swift 3 Я нашел странную проблему. Прямо сейчас (15 сентября 2016 года) Xcode 8 (общедоступная версия) отсутствует, и после преобразования кода мое приложение аварийно завершает работу без видимой причины.

В Auto Layout что-то не так, и в журнале говорится что-то вроде:

[_SwiftValue nsli_superitem]: unrecognized selector sent to instance 

Как я могу решить? Благодаря

4b9b3361

Ответ 1

Просто вычислил странное, но рабочее решение:

Вместо этого:

let views = ["view":aView]
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "...", options:[], metrics: metrics, views: views))

Объявить словарь явно:

let views: [String:UIView] = ["view":aView]
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "...", options:[], metrics: metrics, views: views))

Я знаю, это странно, но это работает. Приветствия

Ответ 2

В быстрой версии 3 мы изменили способ работы с неявно разворачиваемыми опциями. Рассмотрим следующий пример:

let optionalInt: Int! = 1
let int = optionalInt
let array = [int, 2]
print(array) // prints: [Optional(1), Optional(2)]

Поэтому вместо того, чтобы иметь массив типа [Int], как и ожидалось, теперь мы имеем [Int?], что вызывает вышеупомянутую ошибку времени выполнения.


pascalbros обходной путь для явного объявления типа переменной решает проблему, но, чтобы быть уверенным, что там происходит, я бы рекомендовал проверить возможные опции, неожиданно попадая в массив или словарь и меняя его предполагаемый тип.