新的在Xcode 8 beta 4,NSError被桥接到Swift错误协议类型。这在处理失败的SKPaymentTransactions时会影响StoreKit。您应该检查以确保未发生错误,因为事务已取消,以了解是否向用户显示错误消息。你这样做通过检查错误的代码。但是使用Error而不是NSError,没有定义代码。我没有能够弄清楚如何正确地从错误获取错误代码。
这在以前的版本的Swift 3:
- func FailedTransaction(_ transaction: SKPaymentTransaction) {
- if let transactionError = transaction.error {
- if transactionError.code != SKErrorCode.paymentCancelled.rawValue {
- //show error to user
- }
- }
- ...
- }
转换为SKError似乎对我在xCode 8和Swift 3 …
- guard let error = transaction.error as? SKError else {return}
- switch error.code { // https://developer.apple.com/reference/storekit/skerror.code
- case .unknown: break
- case .paymentCancelled: break
- case .clientInvalid: break
- case .paymentInvalid: break
- case .paymentNotAllowed: break
- case .cloudServiceNetworkConnectionFailed: break
- case .cloudServicePermissionDenied: break
- case .storeProductNotAvailable: break
- }
不需要rawValue。