Rx ObservableでSKPaymentQueueをラップする方法を知っていますか? SKPaymentQueueではSKPaymentTransactionObserverに準拠したオブザーバーをSKPaymentQueue.addTransactionObserverメソッドで登録する必要があります。RxでSKPaymentQueueをラップする方法Observable
これまでのところ、私は以下を試しましたが、うまくいきません。オブザーバプロキシが呼び出される前に、オブザーバプロキシの割り当てが解除されているためと思われます。 、私はまた、インスピレーションを探してRxCocoaソースの周りNSNotificationCenter拡張子が最も近い例を狩ってきた
class StoreService {
let paymentQueue = SKPaymentQueue.defaultQueue()
func purchase(product: SKProduct) -> Observable<SKProduct> {
return Observable.create { (observer) in
let transactionObserver = PaymentTransactionProxyObserver(observer)
self.paymentQueue.addTransactionObserver(transactionObserver)
let payment = SKPayment(product: product)
self.paymentQueue.addPayment(payment)
return AnonymousDisposable {
self.paymentQueue.removeTransactionObserver(transactionObserver)
}
}
}
}
class PaymentTransactionProxyObserver: NSObject, SKPaymentTransactionObserver {
let observer: AnyObserver<SKPaymentTransaction>
init(_ observer: AnyObserver<SKPaymentTransaction>) {
self.observer = observer
}
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
observer.onNext(transaction)
}
observer.onCompleted()
}
}
とは対照的に、クロージャを使用しています。それは私がここに慣用のRxトリックのいくつかの種類が欠けているように感じています複数のコールバックメソッドを持つオブザーバは、レジスタと登録解除のステップを実行します。また、他の拡張機能で使用されているDelegateProxyパターンには適合していないようです。