我具有下载JSON的功能,并将其附加到数组中
func downloadDetails(completed: @escaping DownloadComplete){
Alamofire.request(API_URL).responseJSON { (response) in
let result = response.result
let json = JSON(result.value!).array
let jsonCount = json?.count
let count = jsonCount!
for i in 0..<(count){
let image = json![i]["urls"]["raw"].stringValue
self.imagesArray.append(image)
}
self.tableView.reloadData()
print(self.imagesArray)
completed()
}
}
我知道viewDidLoad
首先加载,viewDidAppear
之后加载。我正在尝试检索包含所有信息的数组,但由于该数组为空,因此未显示在viewDidLoad
上,但它以10个数组显示在viewDidAppear
上,我不知道如何从中获取该信息。 viewDidAppear
。
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var imageList: Image!
var imagesArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad " ,imagesArray)
setupDelegate()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
downloadDetails {
DispatchQueue.main.async {
}
print("viewDidAppear ", self.imagesArray)
}
}
输出如下
viewDidLoad []
viewDidAppear ["https://images.unsplash.com/photo-1464550883968-cec281c19761", "https://images.unsplash.com/photo-1464550838636-1a3496df938b", "https://images.unsplash.com/photo-1464550580740-b3f73fd373cb", "https://images.unsplash.com/photo-1464547323744-4edd0cd0c746", "https://images.unsplash.com/photo-1464545022782-925ec69295ef", "https://images.unsplash.com/photo-1464537356976-89e35dfa63ee", "https://images.unsplash.com/photo-1464536564416-b73260a9532b", "https://images.unsplash.com/photo-1464536194743-0c49f0766ef6", "https://images.unsplash.com/photo-1464519586905-a8c004d307cc", "https://images.unsplash.com/photo-1464519046765-f6d70b82a0df"]
访问其中包含信息的数组的正确方法是什么?
答案 0 :(得分:0)
那是因为请求是异步的,它没有作为串行代码行执行,因此根据网络状态应该有一个延迟,除了您甚至没有在downloadDetails
内调用viewDidLoad
//
您还需要在此处重新加载表格
downloadDetails { // Alamofire callback by default runs in main queue
self.tableView.reloadData()
}
答案 1 :(得分:0)
只需在
上调用您的方法viewDidLoad()
也许您应该了解有关iOS生命周期的更多信息,以便可以发现 viewDidLoad 和 viewDidAppear
之间的区别