有誰知道你會怎樣將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模式。