在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; } 

不知道为什么。