如何在没有故事板的情况下将 Razorpay 集成到 SwiftUI 中

How to integrate Razorpay in SwiftUI without storyboard

我正在考虑将 Razorpay 结账功能与 Xcode 中的 iOS 集成,并在 https://razorpay.com/docs/payment-gateway/ios-integration/standard/ 找到了官方文档。该文档有助于将 Razorpay 与 UIViewController 集成。我正在构建的 iOS 应用程序没有使用故事板,而是严格的 SwiftUI。我研究了多种将 UIViewController 合并到 SwiftUI 中的方法,这完全有可能使用 UIViewRepresentable 但代码结构使用

struct ComponentName: UIViewRepresentable{}

但是 iOS 的 Razorpay SDK 希望将 RazorpayPaymentCompletionProtocol 实现到 class 而不是结构。我该如何在严格的 SwiftUI 应用程序中使用它?

您可以使用协调器来管理视图控制器,该协调器将RazorpayPaymentCompletionProtocol

示例:

struct ComponentName: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> CheckoutViewController {
        .init()
    }

    func updateUIViewController(_ uiViewController: CheckoutViewController, context: Context) { }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    class Coordinator: NSObject, RazorpayPaymentCompletionProtocol {
        let parent: ComponentName
        
        typealias Razorpay = RazorpayCheckout
        var razorpay: RazorpayCheckout!
        
        init(_ parent: ComponentName) {
            self.parent = parent
            
            RazorpayCheckout.initWithKey(razorpayTestKey, andDelegate: self)
        }
        
        func onPaymentError(_ code: Int32, description str: String) {
              print("error: ", code, str)
           //   self.presentAlert(withTitle: "Alert", message: str)
            // parent.alert with message
          }

          func onPaymentSuccess(_ payment_id: String) {
              print("success: ", payment_id)
           //   self.presentAlert(withTitle: "Success", message: "Payment Succeeded")
          }
    }
}

class CheckoutViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //  self.showPaymentForm()
    }
}