有谁知道你会怎样将SKPaymentQueue包装在Rx Observable中? SKPaymentQueue要求您通过SKPaymentQueue.addTransactionObserver方法注册符合SKPaymentTransactionObserver的观察员。如何在Rx中包装SKPaymentQueue Observable
到目前为止,我试过以下,但它不工作。我怀疑是因为观察员代理在被调用之前就被释放了。这感觉就像我失去了某种惯用的Rx伎俩在这里:
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()
}
}
我也是在RxCocoa源猎杀四处寻找灵感但是最接近例如,NSNotificationCenter扩展,使用了闭包,而不是一个具有多个回调方法的观察者一个注册和注销步骤。它似乎也不适合其他扩展使用的DelegateProxy模式。