Xcode 8 beta 4中的新增NSError功能桥接到Swift Error协议类型。处理失败SKPaymentTransaction的时,这会影响StoreKit 。您应该检查以确保没有发生错误,因为交易被取消了才知道是否向用户显示错误消息。您可以通过检查错误的完成此操作code。但是使用Error代替NSError,没有code定义。我还无法弄清楚如何从中正确获取错误代码Error。
NSError
Error
SKPaymentTransaction
code
这在Swift 3的先前版本中有效:
func failedTransaction(_ transaction: SKPaymentTransaction) { if let transactionError = transaction.error { if transactionError.code != SKErrorCode.paymentCancelled.rawValue { //show error to user } } ... }
现在error是一个Errornot NSError,code不是成员。
error
SKError在xCode 8和Swift 3中,cast to 似乎对我有用…
SKError
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。
rawValue