複数のリスナー/サブスクライバーに送信したいオブジェクトがあるため、Combine を調べていたところ、 と という 2 つの異なる種類のパブリッシャーが表示されNotificationCenter.Publisher
ましPassThroughSubject
た。なぜ誰かがNotificationCenter.Publisher
overを使うのか混乱していPassThroughSubject
ます。
以下のコードを思いつき、両方の方法を示しました。要約する:
NotificationCenter.Publisher
Notification.Name
静的プロパティが必要です- 本当にタイプセーフではありませんか(同じ
Notification.Name
/ 異なるパブリッシャーに対して異なる種類のオブジェクトを投稿できるためNotification.Name
) NotificationCenter.default
新しい値の投稿は、 (パブリッシャー自体ではなく)上で行う必要があります。map
クロージャで使用される型への明示的なダウンキャスト
誰かがNotificationCenter.Publisher
overを使用するのはどのようなシナリオPassThroughSubject
ですか?
import UIKit
import Combine
let passThroughSubjectPublisher = PassthroughSubject<String, Never>()
let notificationCenterPublisher = NotificationCenter.default.publisher(for: .name).map { $0.object as! String }
extension Notification.Name {
static let name = Notification.Name(rawValue: "someName")
}
class PassThroughSubjectPublisherSubscriber {
init() {
passThroughSubjectPublisher.sink { (_) in
// Process
}
}
}
class NotificationCenterPublisherSubscriber {
init() {
notificationCenterPublisher.sink { (_) in
// Process
}
}
}
class PassThroughSubjectPublisherSinker {
init() {
passThroughSubjectPublisher.send("Henlo!")
}
}
class NotificationCenterPublisherSinker {
init() {
NotificationCenter.default.post(name: .name, object: "Henlo!")
}
}