Eigene Subscriber - wurzelsand/swift-memos GitHub Wiki
-
Subscriber
implementieren -
Array als Publisher
import Combine
class StringSubscriber: Subscriber {
...
}
let publisher = ["A", "B", "C", "D"].publisher
let subscriber = StringSubscriber()
publisher.subscribe(subscriber)
Implementiere StringSubscriber
so, dass das Programm Folgendes ausgibt:
-
Benachrichtigung, wenn ein Publisher eine Subscription angefordert hat.
-
Benachrichtigung und Inhalt, wenn ein String empfangen wird ("A", "B", ...).
-
Benachrichtigung, nachdem ein Publisher seinen letzten Wert übertragen hat.
import Combine
class StringSubscriber: Subscriber {
typealias Input = String
typealias Failure = Never
func receive(subscription: Subscription) {
print("Subscription received")
subscription.request(.max(1)) // #1
}
func receive(_ input: String) -> Subscribers.Demand {
print("Value received:", input)
return .max(1) // #2
}
func receive(completion: Subscribers.Completion<Never>) {
print("Completed")
}
}
let publisher = ["A", "B", "C", "D"].publisher
let subscriber = StringSubscriber()
publisher.subscribe(subscriber)
Ausgabe:
Subscription received
Value received: A
Value received: B
Value received: C
Value received: D
Completed
-
subscription.request(.max(1))
bedeutet, dass zunächst höchstens ein Wert angefordert wird. -
return .max(1)
bedeutet, dass jedesmal bei seinem Aufruf höchstens ein weiterer Wert empfangen werden kann.