如何使用 Alamofire 更改全局变量?
Posted
技术标签:
【中文标题】如何使用 Alamofire 更改全局变量?【英文标题】:How to change global variable with Alamofire? 【发布时间】:2019-05-03 18:27:53 【问题描述】:我想用 Alamofire 获取用户数据并将其填充到 tableView。
我的代码:
class MainTableViewController: UITableViewController
var userEntries = [UserEntries]()
override func viewDidLoad()
super.viewDidLoad()
fetchUserData (ue) in
print("ue.count is: \(ue.count)")
self.userEntries = ue
print("self.userEntries.count in this block: \(self.userEntries.count)")
print("self.userEntries.count in viewDidLoad is: \(self.userEntries.count)")
func fetchUserData(completion: @escaping ([UserEntries]) -> Void)
//another code...
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding(destination: .httpBody), headers: headers).responseJSON (response) in
switch response.result
case .success(let value):
let json = JSON(value)
let data = json["mydata"][0].array
var userEntries = [UserEntries]()
//I have 2 records only
data?.forEach( (p) in
userEntries.append(UserEntries(id: p["id"].stringValue, date: p["date"].stringValue, text: p["text"].stringValue))
)
completion(userEntries)
case .failure(let error):
print(error.localizedDescription)
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return self.userEntries.count //it is return 0...
在 viewDidLoad 我有这个打印:
viewDidLoad 中的self.userEntries.count is: 0 //一定是2!!!
ue.count 为:2
self.userEntries.count in this block: 2
并且在 numberOfRowsInSection 方法中返回 0,因为
viewDidLoad 中的self.userEntries.count is: 0 //一定是2!!!
如何正确设置'self.userEntries'变量(数组)以便在tableView方法中使用?
【问题讨论】:
【参考方案1】:由于获取数据的调用是异步的,因此您需要在完成内重新加载表
fetchUserData (ue) in
print("ue.count is: \(ue.count)")
self.userEntries = ue
print("self.userEntries.count in this block: \(self.userEntries.count)")
self.tableView.reloadData()
【讨论】:
以上是关于如何使用 Alamofire 更改全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire + SwiftyJSON 定义全局变量
iPhone,如何使用 App Delegate 变量使其可以像全局变量一样使用?