Используйте compactMap
вместо:
let trickNamePublisher = NotificationCenter.default.publisher(for: .newTrickDownloaded)
.compactMap { $0.userInfo?["data"] as? Data }
Если наше закрытие создает дополнительные данные, оно разворачивается, и мы публикуем данные. Если наше закрытие выдает nil
, ничего не происходит (ничего не публикуется).
(Удивительно, что видео так не пишет. В защиту Apple, как указывают MartinR и Итай Фербер, в видео предполагается, что мы сами публикуем уведомление, поэтому мы точно знаем, что находится у пользователя Развертывание информации и принудительное развертывание является разумным. Этот вопрос и ответ сфокусированы на общей ситуации, когда вы подписались на уведомление от фреймворка, такого как Cocoa. Кроме того, я не могу поверить, что это когда-либо плохо Идея безопасно развернуть, в моем собственном коде, до фреймворка Combine, я всегда безопасно распаковывал userInfo
значений, даже когда сам отправляю уведомление.)