🚨 El sistema clásico de NotificationCenter tiene un problema grave: incluso cuando especificas .main como cola, el compilador no puede verificar la seguridad entre hilos. El dominio de aislamiento permanece como nonisolated, lo que genera advertencias del compilador cuando intentas llamar métodos aislados a @MainActor.
🎯 iOS 26 y Swift 6.2 introducen MainActorMessage y AsyncMessage, dos protocolos que revolucionan cómo trabajamos con notificaciones. Estos nuevos tipos permiten al compilador verificar la seguridad de concurrencia en tiempo de compilación, no en ejecución.
🔐 MainActorMessage está vinculado al actor principal y garantiza ejecución síncrona. Perfecto para notificaciones relacionadas con la UI donde todo debe ejecutarse en el hilo principal. El compilador conoce el contexto de aislamiento y puede razonar sobre la seguridad entre hilos.
⚡ AsyncMessage usa aislamiento arbitrario y se entrega de forma asíncrona. Ideal cuando necesitas notificaciones en contextos concurrentes sin atarte al actor principal. El closure del observador es async y @Sendable, permitiendo máxima flexibilidad.
💪 La gran ventaja: notificaciones fuertemente tipadas. Adiós al userInfo de tipo Any y al casting manual. Ahora defines propiedades específicas en tu mensaje y accedes a ellas directamente, sin unwrapping ni verificaciones de tipo en runtime.
🔄 Mejor interoperabilidad: puedes implementar makeMessage() y makeNotification() para que tus nuevos tipos Message funcionen con código Objective-C o Swift antiguo que aún usa post(name:). Migración gradual sin romper nada.
📐 La propuesta SF-0011 detrás de esto busca llevar a NotificationCenter los principios de Swift moderno: verificación de tipos en compilación, seguridad de concurrencia explícita y APIs ergonómicas. El código es más claro y los errores se detectan antes.
🧹 El resultado: menos código boilerplate, más seguridad, y una experiencia de desarrollo mucho mejor. Pasas de luchar con assumptions de aislamiento a tener garantías verificadas por el compilador.
👨💻 Si tu app usa notificaciones intensivamente, migrar a MainActorMessage y AsyncMessage no solo elimina warnings: mejora la arquitectura y previene condiciones de carrera difíciles de depurar. ¿Ya estás probando estas APIs en tu código?


Deja un comentario