在 Swift 3 错误中访问代码 [英] Accessing code in Swift 3 Error
问题描述
Xcode 8 beta 4 中的新功能,NSError
桥接到 Swift Error
协议类型.这会在处理失败的 SKPaymentTransaction
时影响 StoreKit.您应该检查以确保错误没有因为事务被取消而发生,以了解是否向用户显示错误消息.您可以通过检查错误的code
来做到这一点.但是使用 Error
而不是 NSError
,没有定义 code
.我一直无法弄清楚如何从 Error
正确获取错误代码.
New in Xcode 8 beta 4, NSError
is bridged to the Swift Error
protocol type. This affects StoreKit when dealing with failed SKPaymentTransaction
s. You ought to check to be sure the error didn't occur because the transaction was cancelled to know whether or not to show an error message to the user. You do this by examining the error's code
. But with Error
instead of NSError
, there is no code
defined. I haven't been able to figure out how to properly get the error code from Error
.
这适用于以前版本的 Swift 3:
This worked in the previous version of Swift 3:
func failedTransaction(_ transaction: SKPaymentTransaction) {
if let transactionError = transaction.error {
if transactionError.code != SKErrorCode.paymentCancelled.rawValue {
//show error to user
}
}
...
}
既然 error
是 Error
而不是 NSError
,code
不是成员.
Now that error
is an Error
not NSError
, code
is not a member.
推荐答案
Casting to SKError
似乎在 xCode 8 和 Swift 3 中对我有用...
Casting to SKError
seems to be working for me in xCode 8 and 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
.
这篇关于在 Swift 3 错误中访问代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!