Notifications mit Combine in Swift

Das nachfolgende Beispiel zeigt die Verwendung von Combine in Verbindung mit dem NotificationCenter in Swift, Zuerst ist Combine zu importieren. Dann wird der Name einer Notification deklariert. Dieser wird in Folge beim Senden und Empfangen der Notification verwendet. Des Weiteren deklarieren wir eine Parameter-Namen für den Parameter, den wir der Notification in der userInfo mitgeben.

Anschliessend definieren wir einen Publisher für die Notification.  In dem wird per map in Combine zuerst der Parameter aus der userInfo extrahiert und dann in sink ausgedruckt . In Realität wird dann in der Regel noch t einerseits der cancellables-Set sowie die Zuweisung des Publishers in store benötigt

Wenn nun die Notification gesendet werden wie hier im Beispiel am Ende, dann läuft jedes mal der Publisher mit seinen definierten Aktionen ab.  

import UIKit
import Combine

//declare notification

let notificationName = Notification.Name("MyNotification")
let param1 = "Param1"


// declare publisher


// We need this in classes where a publisher needs to live longer than the function it is defined
var cancellables = Set()

let publisher = NotificationCenter.default.publisher(for: notificationName)

publisher.map({notification -> String in
guard let userInfo = notification.userInfo else {
return "Error : \(notification.name) has no userInfo"
}

guard let value = userInfo[param1] else {
return "Error: \(notification.name) has no or wrong parameter"
}



return " Value : \(value)"
}) .sink(receiveValue: { valueString in
print(valueString)
}).store(in: &cancellables)

// now send notifications from anywhere
NotificationCenter.default.post(name:notificationName,object: nil,userInfo: nil)

NotificationCenter.default.post(name: notificationName,object:nil,userInfo: ["Dummy":122])

NotificationCenter.default.post(name: notificationName,object:nil,userInfo: [param1:42])  
SwiftUI Document App mit Paketdateien

By accepting you will be accessing a service provided by a third-party external to http://h-mayer.de/