Ios 非'@objc';方法';付款授权ViewControllerdFinish';不符合'的要求@objc';协议
获取编译错误 非“@objc”方法“PaymentAuthorizationViewControllerdFinish”不满足“@objc”协议“PKPaymentAuthorizationViewControllerdDelegate”的要求 如果我在PaymentAuthorizationViewControllerdFinish之前添加@objc,则会得到新的错误 @objc只能用于类的成员、@objc协议和类的具体扩展 我可以使用Ios 非'@objc';方法';付款授权ViewControllerdFinish';不符合'的要求@objc';协议,ios,swift,protocol-extension,Ios,Swift,Protocol Extension,获取编译错误 非“@objc”方法“PaymentAuthorizationViewControllerdFinish”不满足“@objc”协议“PKPaymentAuthorizationViewControllerdDelegate”的要求 如果我在PaymentAuthorizationViewControllerdFinish之前添加@objc,则会得到新的错误 @objc只能用于类的成员、@objc协议和类的具体扩展 我可以使用PKPaymentAuthorizationViewCon
PKPaymentAuthorizationViewControllerDelegate
直接扩展处理程序,但我有两个不同的类扩展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
放在功能付款授权ViewControllerdFinish
之前
@objc func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
controller.dismiss(animated: true, completion: nil)
}
尝试将
@objc
放在功能付款授权ViewControllerdFinish
之前
@objc func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
controller.dismiss(animated: true, completion: nil)
}
这样做我得到了新的错误,objc只能用于类的成员、objc协议和类的具体扩展这样做我得到了新的错误,objc只能用于类的成员、objc协议和类的具体扩展。您正在扩展协议并向其添加实现代码,这是您想要做的吗?你不应该扩展一个实现该协议的类吗?@JoakimDanielson但是如果我想在另一个类中使用相同的扩展,我是否需要编写相同的代码twiceDid你找到解决方案了吗?我也面临同样的问题。您正在扩展协议并向其添加实现代码,这是您想要做的吗?你不应该扩展一个实现该协议的类吗?@JoakimDanielson但是如果我想在另一个类中使用相同的扩展,我是否需要编写相同的代码twiceDid你找到解决方案了吗?我也面临同样的问题。