私はCocoaAsyncSocketとSTOMPプロトコルに基づいた簡単なメッセージングアプリケーションを作成しています。CocoaAsyncSocketでのPublishSubjectの正しい使い方
class StompStream: NSObject {
//MARK: - Public
var inputFrame = PublishSubject<StompFrame>()
//MARK: - Private
fileprivate var socket: GCDAsyncSocket!
...
...
fileprivate func parse(withData data: Data) {
let string = String(data: data, encoding: .utf8)
do {
let frame = try StompFrame(text: string)
self.inputFrame.on(.next(frame))
} catch {
self.inputFrame.on(.error(error))
}
}
}
//MARK: - GCDAsyncSocketDelegate methods
extension StompStream: GCDAsyncSocketDelegate {
...
...
func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
self.parse(withData: data)
}
}
ので、inputFrame
を読みたい人他には、単に実行します:
fileprivate func subscribeToEvents() {
self.stompStream.inputFrame
.observeOn(SerialDispatchQueueScheduler(queue: Queues().stompQueue, internalSerialQueueName: "stomp"))
.subscribe(onNext: { inputFrame in
//do some stuff
}).addDisposableTo(self.disposeBag)
}
私の加入者は、このような何かを、着信STOMPフレームを観察することができますので、だから私は、PublishSubject
を使用するメインクラスを作成しました私はRxSwiftにはとても新しく、Observable<StompFrame>
を使ったほうがいいと思っていますが、イベントを読むだけなら、PublishSubjectを使ってこのように-PublishSubject<StompFrame>()
とObservable<StompFrame>
のように私はそれを行うことができますそのようなものは、何も作成せずにfunc
、wher e私はObservable.create { }
を返すので、誰かがイベントを受け取りたいときはいつも、それはObservable<StompFrame>
をもう1つ作成しますが、PublishSubject
はそれだけです。コードが不可欠からの反世界に橋渡しされているので私にこのRxのものを説明する任意の助け 感謝:)