簡體   English   中英

非'@ objc'方法'paymentAuthorizationViewControllerDidFinish'不滿足'@objc'協議的要求

[英]Non-'@objc' method 'paymentAuthorizationViewControllerDidFinish' does not satisfy requirement of '@objc' protocol

獲取錯誤編譯

非'@ objc'方法'paymentAuthorizationViewControllerDidFinish'不滿足'@objc'協議'PKPaymentAuthorizationViewControllerDelegate'的要求

如果我在paymentAuthorizationViewControllerDidFinish之前添加@objc,那么我會得到新的錯誤

@objc只能用於類的成員,@ objc協議和類的具體擴展。

我可以直接使用PKPaymentAuthorizationViewControllerDelegate擴展Handler,但我有兩個不同的類擴展ApplePayable ,我不想為不同的類編寫相同的擴展名

import UIKit
import PassKit

class ApplePayRequestComposer {}

protocol ApplePayable: PKPaymentAuthorizationViewControllerDelegate {

    func applePaymentSheet(composer: ApplePayRequestComposer) -> PKPaymentAuthorizationViewController?
    func processPKPayment(payment:PKPayment, completed:@escaping (_ success:Bool)->())
}


extension ApplePayable {

    func applePaymentSheet(composer: ApplePayRequestComposer) -> PKPaymentAuthorizationViewController?{
        return nil
    }

    func processPKPayment(payment:PKPayment, completed:@escaping (_ success:Bool)->()) {
        completed(false)
    }
}

// PKPaymentAuthorizationViewControllerDelegate implementation
extension ApplePayable
{
    func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        controller.dismiss(animated: true, completion: nil)
    }

    @available(iOS 11.0, *)
    func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Swift.Void) {
        processPKPayment(payment: payment) { success in
            let status = success ? PKPaymentAuthorizationStatus.success:PKPaymentAuthorizationStatus.failure
            let result = PKPaymentAuthorizationResult(status: status, errors: nil)
            completion(result)
        }
    }

    func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, completion: @escaping (PKPaymentAuthorizationStatus) -> Swift.Void) {
        processPKPayment(payment: payment) { success in
            completion(success ? PKPaymentAuthorizationStatus.success: PKPaymentAuthorizationStatus.failure)
        }
    }
}

class Handler: NSObject, ApplePayable
{

}

嘗試把@objc之前func paymentAuthorizationViewControllerDidFinish

    @objc func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        controller.dismiss(animated: true, completion: nil)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM