@unchecked Sendable: его в основном заменил Mutex 🔎
🔥 Sendable — гарантия компилятора, что тип безопасно передавать через границы конкурентности. @unchecked Sendable — обещание, которое вы даёте компилятору, после чего он перестаёт проверять. Раньше выбора особо не было: final class с NSLock или последовательной очередью и @unchecked Sendable сверху. С Swift 6.0 есть Mutex (SE-0433, модуль Synchronization) — и мотивация пропозала ровно в этом: программы «вынуждены использовать ad-hoc реализации мьютекса».
⚠️ И вещь, которую в примерах часто пишут неправильно: последовательная очередь, через которую идут только записи, потокобезопасности не даёт. Любое чтение мимо этой очереди гонится с записями, а несинхронизированное конкурентное чтение Dictionary — это UB, а не просто устаревшее значение. Плюс queue.asyncделает записи незаметно асинхронными. Порядок выбора простой: value-тип с Sendable-полями → конформанс автоматический; нужна разделяемая изменяемая ссылка → actor или Mutex; @unchecked Sendable — последнее средство, а не дефолт. Mutex требует iOS 18 / macOS 15; ниже этого NSLock по-прежнему нужен.