【发布时间】:2019-01-31 00:19:21
【问题描述】:
以下函数描述了应用内购买 (IAP) 的 paymentQueue。选择 .purchase 案例时,将运行“SKPaymentQueue.default().finishTransaction(transaction)”函数。但是,在这种情况下,第二个函数“transactionComplete()”没有。
我想要的是:'SKPaymentQueue.default().finishTransaction(transaction)'函数先完成,然后运行'transactionComplete()'函数。
背景:
“SKPaymentQueue.default().finishTransaction(transaction)”是完成 IAP 交易的无效 StoreKit 函数。
“transactionComplete()”是我自己的函数,它显示一个弹出视图,感谢用户的购买。此功能有效,只是不适用于这种情况。
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
SKPaymentQueue.default().finishTransaction(transaction)
transactionComplete()
break
case .failed:
print("transaction failed.")
break
default:
break
}
}
}
提前致谢!
编辑:
由于这是我第一次使用 IAP,所以我正在尝试各种功能。因此,事实证明,我的应用程序正在从另一个文件中读取 paymentQueue(...) 函数的另一个副本,因为它所属的类被用作 AppDelegate.swift 中的观察者
【问题讨论】:
-
仅供参考,您不需要在 Swift 开关中使用
break,除非它是案例中的唯一行(如在您的默认实例中)。除非您显式调用fallthrough,否则在案例结束时中断是默认行为。 -
transactionComplete应该被调用。尝试在该行上设置一个断点,看看它是否被命中。 -
你能解释一下
transactionComplete()里面发生了什么吗?您是否在transactionComplete()中设置了断点以确认它实际上没有被调用,或者它只是没有按预期运行。
标签: swift switch-statement storekit