В версиях Xcode до 26.2 не было настроек сборки Swift Compiler – Concurrency.

В этих более старых версиях происходит следующее: неизолированная функция выполняется вне основного потока.
Код: Выделить всё
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
run()
}
private func run() {
Task {
await runInMainThread()
}
}
func runInMainThread() async {
print(">>>> IN runInMainThread(), Thread.isMainThread \(Thread.isMainThread)")
await runInBackgroundThread()
}
private nonisolated func runInBackgroundThread() async {
print(">>>> IN runInBackgroundThread(), Thread.isMainThread \(Thread.isMainThread)")
}
}
Код: Выделить всё
>>>> IN runInMainThread(), Thread.isMainThread true
>>>> IN runInBackgroundThread(), Thread.isMainThread false

При запуске того же кода с конфигурацией по умолчанию:
Код: Выделить всё
Approachable Concurrency = Yes
Default Actor Isolation = MainActor
Вывод:
Код: Выделить всё
>>>> IN runInMainThread(), Thread.isMainThread true
>>>> IN runInBackgroundThread(), Thread.isMainThread true
Это поднимает следующие вопросы:
- Какова правильная конфигурация Swift Compiler – Concurrency, если я хочу, чтобы неизолированная функция выполнялась вне основного потока?
- Является ли неизолированный подходящим способом обеспечить выполнение кода в фоновом потоке?
Подробнее здесь: https://stackoverflow.com/questions/798 ... xcode-26-2
Мобильная версия