Swift 编译器错误(Xcode):类型“AppleMethods”不符合协议“PKAddPaymentPassViewControllerDelegate”

问题描述 投票:0回答:1

我正在尝试实现Apple Provising(将卡添加到钱包),但我可以在实现的快速方面找出错误。问题是

 Swift Compiler Error (Xcode): Type 'AppleMethods' does not conform to protocol 'PKAddPaymentPassViewControllerDelegate'
ppDelegate.swift:89:0 (这是它调用“扩展 AppleMethods: PKAddPaymentPassViewControllerDelegate”的时间

有谁知道如何解决吗?

这是我的代码:

class AppleMethods: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  required public init(coder aDecoder: NSCoder) {
    faltalError("init(coder:) has not been implemented")
  }


   static func isPassKitAvailable() -> Bool {
    let result = PKAddPaymentPassViewController.canAddPaymentPass()
    return result
  }

       func initEnrollProcess() {

        guard let configuration = PKAddPaymentPassRequestConfiguration(encryptionScheme: .ECC_V2) else {
          // self.alert(message: "InApp enrollment configuration fails")
        }

        configuration.cardholderName = cardDetails["cardHolderName"]!
        configuration.primaryAccountSuffix = cardDetails["bankCardNumber"]
        configuration.localizedDescription = cardDetails["bankCardName"]
        configuration.primaryAccountIdentifier = cardDetails["bankCardPanRefId"]
        // configuration.paymentNetwork = .masterCard

        guard let enrollViewController = PKAddPaymentPassViewController(requestConfiguration: configuration, delegate: self) else {
          // self.alert(message: "InApp entrollment controller configuration fails")
          return
        }

        enrollViewController.modalPresentationStyle = UIModalPresentationStyle.pageSheet;
        present(enrollViewController, animated: true, completion: nil)

    }

}

extension AppleMethods: PKAddPaymentPassViewControllerDelegate {
  func addPaymentPassViewController(
    _ controller: PKAddPaymentPassViewController,
    generateRequestWithCertificateChain certificates: [Data],
    nonce: Data, nonceSignature: Data,
    completionHandler handler: @escaping (PKAddPaymentPassRequest) -> Void){
      let certficateArray = certificates.map { $0.base64EncodedString() }
      let interactor = AppleWalletInteractor()
      interactor.execute(request: request) { response in
        let request =  PKAddPaymentPassRequest()
        request.activationData = response.activationData
        request.ephemeralPublicKey = response.ephemeralPublicKey
        request.encryptedPassData = response.encryptedPassData
        handler(request)
      }


    }

  // func addPaymentPassViewController(
  //   _ controller: PKAddPaymentPassViewController, 
  // )
}

我发现这可能是一些拼写错误,但我可以找到任何东西。

swift xcode applepay
1个回答
0
投票

您收到此错误是因为您尚未实施

    func addPaymentPassViewController(_ controller: PKAddPaymentPassViewController, 
                                      didFinishAdding pass: PKPaymentPass?,
                                      error: Error?) {

    }

下面的代码在 Xcode 15 中对我来说编译得很好

class AppleMethods: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  required public init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }


   static func isPassKitAvailable() -> Bool {
    let result = PKAddPaymentPassViewController.canAddPaymentPass()
    return result
  }

       func initEnrollProcess() {

        guard let configuration = PKAddPaymentPassRequestConfiguration(encryptionScheme: .ECC_V2) else {
          // self.alert(message: "InApp enrollment configuration fails")
            return
        }

//        configuration.cardholderName = cardDetails["cardHolderName"]!
//        configuration.primaryAccountSuffix = cardDetails["bankCardNumber"]
//        configuration.localizedDescription = cardDetails["bankCardName"]
//        configuration.primaryAccountIdentifier = cardDetails["bankCardPanRefId"]
//        configuration.paymentNetwork = .masterCard

        guard let enrollViewController = PKAddPaymentPassViewController(requestConfiguration: configuration, delegate: self) else {
          // self.alert(message: "InApp entrollment controller configuration fails")
          return
        }

        enrollViewController.modalPresentationStyle = UIModalPresentationStyle.pageSheet;
        present(enrollViewController, animated: true, completion: nil)

    }

}

extension AppleMethods: PKAddPaymentPassViewControllerDelegate {
    func addPaymentPassViewController(_ controller: PKAddPaymentPassViewController, 
                                      didFinishAdding pass: PKPaymentPass?,
                                      error: Error?) {

    }
    
  func addPaymentPassViewController(
    _ controller: PKAddPaymentPassViewController,
    generateRequestWithCertificateChain certificates: [Data],
    nonce: Data, nonceSignature: Data,
    completionHandler handler: @escaping (PKAddPaymentPassRequest) -> Void){
      let certficateArray = certificates.map { $0.base64EncodedString() }
//      let interactor = AppleWalletInteractor()
//      interactor.execute(request: request) { response in
//        let request =  PKAddPaymentPassRequest()
//        request.activationData = response.activationData
//        request.ephemeralPublicKey = response.ephemeralPublicKey
//        request.encryptedPassData = response.encryptedPassData
//        handler(request)
//      }


    }
}
© www.soinside.com 2019 - 2024. All rights reserved.