[英]Non-'@objc' method 'paymentAuthorizationViewControllerDidFinish' does not satisfy requirement of '@objc' protocol
Getting error compiling 获取错误编译
Non-'@objc' method 'paymentAuthorizationViewControllerDidFinish' does not satisfy requirement of '@objc' protocol 'PKPaymentAuthorizationViewControllerDelegate' 非'@ objc'方法'paymentAuthorizationViewControllerDidFinish'不满足'@objc'协议'PKPaymentAuthorizationViewControllerDelegate'的要求
If i add @objc before paymentAuthorizationViewControllerDidFinish, than i get new error of 如果我在paymentAuthorizationViewControllerDidFinish之前添加@objc,那么我会得到新的错误
@objc can only be used with members of classes, @objc protocols, and concrete extensions of classes. @objc只能用于类的成员,@ objc协议和类的具体扩展。
I can directly extend Handler with PKPaymentAuthorizationViewControllerDelegate
but I have two different class that extends ApplePayable
and I don't want to write the same extension for different class 我可以直接使用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
{
}
Try putting @objc
before func paymentAuthorizationViewControllerDidFinish
. 尝试把@objc
之前func paymentAuthorizationViewControllerDidFinish
。
@objc func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
controller.dismiss(animated: true, completion: nil)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.