迅速。然后 TableView 加载数据

Posted

技术标签:

【中文标题】迅速。然后 TableView 加载数据【英文标题】:Swift. Data is loaded after then TableView 【发布时间】:2020-06-18 14:18:38 【问题描述】:

我有 2 个文件。首先 - TransactionsViewController。第二 - 获取交易。当我打开 TransactionsViewController 时,该视图中的表加载速度比 GetTransactions 中的日期快。因此,它显示为空白。如何解决? 下面是TransactionsViewControllerviewDidLoad的代码:

override func viewDidLoad() 
    super.viewDidLoad()
    GetTransactions().getTransactions()
    clientsCount = GetTransactions.transactions.count
    setupNavBar()
    createTable()
    refreshSetup()

GetTransactions 的代码如下:

class GetTransactions 

    static var transactionsArr = [[String : Any]]()
    static var transactions = [TransactionInfo]()

    let URL_GET_TRANSACTIONS = "https://mashkov.dev/sites/default/BankApp/Transactions/Transactions.php"

    func getTransactions()
        GetTransactions.transactionsArr.removeAll()
        AF.request(URL_GET_TRANSACTIONS).responseJSON (response) in
            if (response.value as? [[String : Any]]) != nil 
                GetTransactions.transactionsArr = response.value as! [[String : Any]]
            
            self.convertData()
            print(GetTransactions.transactions)
        
    

    func convertData() 
        GetTransactions.transactions.removeAll()
        for transaction in GetTransactions.transactionsArr 
            let cl = TransactionInfo(id: transaction["id"] as! String,
                                     payee: transaction["payee_account_id"] as! String,
                                     sender: transaction["sender_account_id"] as! String,
                                     transDate: transaction["trans_date"] as! String,
                                     amount: transaction["amount"] as! String,
                                     isSuccessfully: Bool((transaction["isSuccessfully"] as! String)) ?? true)
            GetTransactions.transactions.append(cl)
        
    

【问题讨论】:

你需要了解异步。 if (response.value as? [[String : Any]]) != nil 将在您认为会后调用。 将闭包作为参数传递给getTransactions,并在您进行API调用并完成处理后执行它。在关闭时重新加载表视图。你有你想要的 【参考方案1】:

你需要的是一个闭包/块作为参数传递

class GetTransactions 

    static var transactionsArr = [[String : Any]]()
    static var transactions = [TransactionInfo]()

    let URL_GET_TRANSACTIONS = "https://mashkov.dev/sites/default/BankApp/Transactions/Transactions.php"

    func getTransactions(completion block: () -> ())
        GetTransactions.transactionsArr.removeAll()
        AF.request(URL_GET_TRANSACTIONS).responseJSON (response) in
            if (response.value as? [[String : Any]]) != nil 
                GetTransactions.transactionsArr = response.value as! [[String : Any]]
            
            self.convertData()
            print(GetTransactions.transactions)
            block()
        
    

    func convertData() 
        GetTransactions.transactions.removeAll()
        for transaction in GetTransactions.transactionsArr 
            let cl = TransactionInfo(id: transaction["id"] as! String,
                                     payee: transaction["payee_account_id"] as! String,
                                     sender: transaction["sender_account_id"] as! String,
                                     transDate: transaction["trans_date"] as! String,
                                     amount: transaction["amount"] as! String,
                                     isSuccessfully: Bool((transaction["isSuccessfully"] as! String)) ?? true)
            GetTransactions.transactions.append(cl)
        
    

你用它来称呼它,

        GetTransactions().getTransactions 
            clientsCount = GetTransactions.transactions.count
            //reload your tableView here
        

【讨论】:

以上是关于迅速。然后 TableView 加载数据的主要内容,如果未能解决你的问题,请参考以下文章

用tableview重新加载uiviewcontroller的table view subobject的数据

iOS tableView图片未知宽高加载优化 之 runloop

如何使用 NSSet 填充 tableView? (迅速)

如何在 TableView 中重新加载数据

从已关闭的应用程序发送有关新 JSON 数据的本地通知? |迅速

tableView.tableHeaderView赋值后立即刷新