Свифт. Данные загружаются после TableView - PullRequest
0 голосов
/ 18 июня 2020

У меня 2 файла. Первый - TransactionsViewController. Второй - GetTransactions. Когда я открываю TransactionsViewController, таблица из этого представления загружается быстрее, чем дата из GetTransactions. Поэтому он отображается пустым. Как это исправить? Вот код TransactionsViewController viewDidLoad:

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)
        }
    }
}

1 Ответ

0 голосов
/ 18 июня 2020

Что вам нужно, так это замыкание / блок, который должен быть передан в качестве аргумента

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
        }
...