IDN Media Timotius Leonardo Lianoto Aug 8, 2024

Best Practices for NotificationCenter Usage in Swift

Article Summary

Timotius Leonardo Lianoto from IDN Engineering admits he's not a fan of NotificationCenter—it's hard to trace, difficult to test, and can turn into spaghetti code. But he's built a protocol-based solution that might change your mind.

NotificationCenter in Swift is a double-edged sword: it decouples objects and saves time, but creates traceability nightmares and testing headaches. This article walks through building a NotificatorSpecs protocol that wraps NotificationCenter with type-safe enums, centralized observer tracking, and full testability.

Key Takeaways

Critical Insight

A protocol-based NotificationCenter wrapper solves traceability and testing problems while maintaining the decoupling benefits Swift developers rely on.

The article includes a working demo app with color-changing views and passing unit tests that prove the approach works in production code.

About This Article

Problem

NotificationCenter observers are hard to track across codebases. It's unclear which objects post notifications with specific IDs or which ones listen to them. This creates maintenance headaches for teams.

Solution

Timotius Leonardo Lianoto built a NotificatorSpecs protocol with a NotificatorSpecsComponents class. It centralizes all active observers in a single dictionary and uses type-safe NotificatorNameType enums instead of raw strings.

Impact

The solution allows full unit testing of NotificationCenter behavior, as shown by successful test runs. It also maintains thread-safe observer management through DispatchQueue to prevent data races during async updates.