如何从另一个 class 重新加载 ViewController?

How to reload ViewController from another class?

我想在购买成功后重新加载 ViewController。但是如何从采购class。如何从另一个 class 重新加载 ViewController?

class IAPObserver: NSObject, SKPaymentTransactionObserver {

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
                case .purchasing:
                    break
                
                case .purchased:
                    delegate?.purchaseStatusDidUpdate(PurchaseStatus.init(state: .complete, error: nil, transaction: transaction, message:"Purchase Complete."))
                    SKPaymentQueue.default().finishTransaction(transaction)

                    // code to reload my ViewController

                case .failed:

                    delegate?.purchaseStatusDidUpdate(PurchaseStatus.init(state: .failed, error: transaction.error, transaction: transaction, message:"An error occured."))
                    SKPaymentQueue.default().finishTransaction(transaction)
                
                case .restored:

                    delegate?.restoreStatusDidUpdate(PurchaseStatus.init(state: .complete, error: nil, transaction: transaction, message:"Restore Success!"))
                    SKPaymentQueue.default().finishTransaction(transaction)
                    
                case .deferred:

                    break
            }
        }
    }

您必须在管理 table 视图的视图控制器自身中调用 reloadData()。 幸运的是,您可以使用通知来实现从另一个 class 调用相关函数。 在视图控制器中

override func viewDidLoad() {
        super.viewDidLoad()
        ...
        NotificationCenter.default.addObserver(self, selector: #selector(reloadTableViewData), name: NSNotification.Name(rawValue: "reloadData"), object: nil)
    }

@objc func reloadTableViewData() {
        tableView.reloadData()
    }

在您的 class IAPObserver 中,使用以下命令通知您现在要重新加载数据:

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadData"), object: nil)