我已将JSON
附加到数组中,当我从viewdidload
或其他地方打印数组时,它显示为空白。
我创建了一个用于获取数据的自定义函数,并在viewdidload
中对其进行了调用。
以下是我的完整代码:
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
var Usernames = NSMutableArray()
var emails = [String]()
let url_Posts = "https://jsonplaceholder.typicode.com/posts"
let url_Users = "https://jsonplaceholder.typicode.com/users"
override func viewDidLoad() {
super.viewDidLoad()
fetchJSONData()
print("usernames are",(Usernames))
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return Usernames.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//TableView Codes
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! PostsCell
cell.lblEmail.text = self.emails[indexPath.row]
cell.lblUsername.text = self.Usernames[indexPath.row] as! String
return cell
}
func fetchJSONData() {
Alamofire.request(url_Users).responseJSON {
(response) in
if let rawData = response.result.value as! [[String:Any]]? {
for one in rawData {
let name = one["name"]
self.Usernames.add(name!)
}
}
}
}
}
答案 0 :(得分:0)
您需要在此处写一个Returning data from async call in Swift function
或在此处重新加载表格
for one in rawData {
let name = one["name"]
self.Usernames.add(name!)
}
self.tableView.reloadData()
最好有一个模型数组而不是单独的数组,并使用Codable
struct Root : Decodable {
let name,email:String
}
func fetchJSONData(completion:@escaping([Root]?) -> () ) {
Alamofire.request(url_Users).responseData(completionHandler : { (response) in
switch response.result {
case .success( let data):
// I want to append the user struct by the user data collected from JSON
print(response.result.value!)
do {
let res = try JSONDecoder().decode([Root].self,from:data)
completion(res)
}
catch {
print(error)
completion(nil)
}
case .failure(let error):
print (error)
completion(nil)
}
})
}
致电
fetchJSONData { (arr) in
if let res = arr {
print(res)
}
}