1. ホーム
  2. swift

Swift 3 のコードへのアクセスエラー

2023-10-19 12:23:55

質問

Xcode 8 beta 4 の新機能。 NSError がブリッジされ、Swift の Error プロトコルタイプにブリッジされています。これは、StoreKit が失敗した SKPaymentTransaction s. ユーザーにエラーメッセージを表示するかどうか判断するために、トランザクションがキャンセルされたためにエラーが発生したのではないことを確認する必要があります。これを行うには、エラーの 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
        }
     }
     ...
}

では、その errorError ではなく NSError , code はメンバーではありません。

どのように解決するのですか?

へのキャスト SKError は、xCode 8と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 .