nonisolated на типе: отрезать вывод глобального актора 🚨
🔥 SE-0449 (Swift 6.1) распространяет nonisolated на целый протокол, структуру, класс, энум и расширение — чтобы глобальный актор не выводился через список конформансов. Акторов в этом списке нет.
⚠️ И сразу поправка к самой частой посылке в статьях на эту тему: «вьюмодели SwiftUI автоматически становятся @MainActor» — неверно. ObservableObject это обычный протокол из Combine без атрибута изоляции, class ViewModel: ObservableObject не выводит ничего. Вывод @MainActor приходит из четырёх мест: конформанс к @MainActor-протоколу (у SwiftUI это View, App, Scene), наследование от @MainActor-суперкласса, оверрайд @MainActor-объявления, или флаг -default-isolation MainActor. Кстати, раньше выводили ещё и property wrappers — @StateObject делал @MainActor всю вьюху, — но SE-0401 это убрал. Два нюанса самого nonisolated: он распространяется на все члены типа, но вложенные типы всё равно выводят изоляцию из своих списков конформансов. И тип теряет неявный Sendable, который приходил вместе с @MainActor— для клиентов это ломающее изменение.