在iOS 9.3 / Xcode 7.3中使用StoreKit常量时使用未parsing的标识符
尝试使用这些StoreKit常量之一时出现错误“使用未parsing的标识符”:
SKErrorClientInvalid SKErrorPaymentCancelled SKErrorPaymentInvalid SKErrorPaymentNotAllowed SKErrorStoreProductNotAvailable SKErrorUnknown
您的代码可能如下所示:
if transaction.error!.code == SKErrorPaymentCancelled { print("Transaction Cancelled: \(transaction.error!.localizedDescription)") }
什么改变了? 是否有需要导入的新模块?
从iOS 9.3开始,某些StoreKit常量已经从SDK中删除。 有关完整的更改列表,请参阅Swift的StoreKit更改 。
这些常量已被replace为SKErrorCode
枚举和相关值:
SKErrorCode.ClientInvalid SKErrorCode.CloudServiceNetworkConnectionFailed SKErrorCode.CloudServicePermissionDenied SKErrorCode.PaymentCancelled SKErrorCode.PaymentInvalid SKErrorCode.PaymentNotAllowed SKErrorCode.StoreProductNotAvailable SKErrorCode.Unknown
您应该检查是否与枚举的rawValue
检查您的rawValue
。 例:
private func failedTransaction(transaction: SKPaymentTransaction) { print("failedTransaction...") if transaction.error?.code == SKErrorCode.PaymentCancelled.rawValue { print("Transaction Cancelled: \(transaction.error?.localizedDescription)") } else { print("Transaction Error: \(transaction.error?.localizedDescription)") } SKPaymentQueue.defaultQueue().finishTransaction(transaction) }
如果在iOS 9.3及更高版本上使用StoreKit创build新应用程序,则应该检查这些错误代码而不是传统常量。
添加到@JAL答案inheritance人开关变体
switch (transaction.error!.code) { case SKErrorCode.Unknown.rawValue: print("Unknown error") break; case SKErrorCode.ClientInvalid.rawValue: print("Client Not Allowed To issue Request") break; case SKErrorCode.PaymentCancelled.rawValue: print("User Cancelled Request") break; case SKErrorCode.PaymentInvalid.rawValue: print("Purchase Identifier Invalid") break; case SKErrorCode.PaymentNotAllowed.rawValue: print("Device Not Allowed To Make Payment") break; default: break; }
上面的答案都没有为我工作。 什么解决了它是前置StoreKit到SKError。
我的开关看起来像这样:
switch (transaction.error!.code) { case StoreKit.SKErrorCode.Unknown.rawValue: print("Unknown error") break; }
不知道为什么。