一尘不染

在Swift 3错误中访问代码

swift

Xcode 8 beta 4中的新增NSError功能桥接到Swift
Error协议类型。处理失败SKPaymentTransaction的时,这会影响StoreKit
。您应该检查以确保没有发生错误,因为交易被取消了才知道是否向用户显示错误消息。您可以通过检查错误的完成此操作code。但是使用Error代替NSError,没有code定义。我还无法弄清楚如何从中正确获取错误代码Error

这在Swift 3的先前版本中有效:

func failedTransaction(_ transaction: SKPaymentTransaction) {
    if let transactionError = transaction.error {
        if transactionError.code != SKErrorCode.paymentCancelled.rawValue {
            //show error to user
        }
     }
     ...
}

现在error是一个Errornot NSErrorcode不是成员。


阅读 279

收藏
2020-07-07

共1个答案

一尘不染

SKError在xCode 8和Swift 3中,cast to 似乎对我有用…

    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

2020-07-07