SKError中的变量“代码”在哪里定义?

时间:2019-05-30 21:35:19

标签: ios swift storekit

我正在查看使用SKError“代码”属性或变量的代码示例。 我似乎无法为此属性定义任何定义。 xcode / Swift如何访问此属性? 我正在使用带有此问题的SwiftyStoreKit。 谢谢

试图在文档中查找SKError,那里什么也没有。 尝试过在xcode中进行实时调试,无法从xcode中了解这是从哪里来的。

    SwiftyStoreKit.purchaseProduct("X", quantity: 1, atomically: true) { result in
        switch result {
        case .success(let purchase):
            print("Purchase Success: \(purchase.productId)")
            let defaults = UserDefaults.standard
            defaults.set(true, forKey: "Y")
        case .error(let error):
            switch error.code {
            case .unknown: self.Alert("Z")

只想知道xcode如何访问此属性。

2 个答案:

答案 0 :(得分:0)

请参见SKError.Code documentation中的SKError documentation。在Xcode中,您还可以按 shift + 命令 + o (字母“ oh”),然后输入SKError并跳至定义。


这些是此时的值:

  

case unknown
  错误代码,指示发生未知或意外错误。

     

case clientInvalid
  错误代码,指示不允许客户端执行尝试的操作。

     

case paymentCancelled
  错误代码,指示用户取消了付款请求。

     

case paymentInvalid
  错误代码,指示App Store无法识别付款参数之一。

     

case paymentNotAllowed
  错误代码,指示不允许用户授权付款。

     

case storeProductNotAvailable
  错误代码,表明所请求的产品在商店中不可用。

     

case cloudServicePermissionDenied
  错误代码,指示用户不允许访问云服务信息。

     

case cloudServiceNetworkConnectionFailed
  错误代码,表明设备无法连接到网络。

     

case cloudServiceRevoked
  错误代码,指示用户已撤消使用此云服务的权限。

     

case privacyAcknowledgementRequired
  错误代码,指示用户尚未确认Apple的Apple Music隐私政策。

     

case unauthorizedRequestData
  错误代码,指示该应用正在尝试使用其不具备必需权利的属性。

     

case invalidOfferIdentifier
  错误代码,指示商品标识无效。

     

case invalidOfferPrice
  错误代码,表明您在App Store Connect中指定的价格不再有效。

     

case invalidSignature
  错误代码,指示付款折扣中的签名无效。

     

case missingOfferParams
  错误代码,表明付款折扣中缺少参数。

答案 1 :(得分:0)

这可能有助于认识到SKError符合Error,后者已桥接到NSError。如果查看NSError文档,您会看到它具有一个code属性,它是一个Int。因此,SKError也有这个。

在这一切最终源于Objective-C的世界中,在Objective-C枚举中列出了SKError的code的可能NSInteger值:

typedef NS_ENUM(NSInteger,SKErrorCode) {
    SKErrorUnknown,
    SKErrorClientInvalid,
    SKErrorPaymentCancelled, 
    // ...
}

它作为具有Int原始值的SKError.Code类型的Swift枚举被导入到Swift中:

public struct SKError {
    public enum Code : Int {
        case unknown
        case clientInvalid
        case paymentCancelled
        // ...
    }
}

为了方便起见,可以将名称.clientInvalid等与SKError的code进行比较。