Я пытаюсь сделать некоторые представления в фоновом потоке, чтобы не влиять на основной поток. Это никогда не было проблемой перед Xcode 9.
DispatchQueue.global(qos: .background).async {
let customView = UIView(frame: .zero)
DispatchQueue.main.async {
self.view.addSubview(customView)
}
}
UIView.init(frame :) должен использоваться только из основного потока
Эта ошибка возникает во второй строке.
Обновить
Документация Apple UIView
самом деле говорит в разделе Threading Considerations:
Манипуляции к пользовательскому интерфейсу приложений должны присутствовать в основном потоке. Таким образом, вы всегда должны вызывать методы класса UIView из кода, запущенного в основном потоке вашего приложения. Единственный раз, когда это может быть не обязательно, необходимо при создании самого объекта вида, но все другие манипуляции должны происходить в основном потоке.