Я не могу понять, почему мои массивы (amountArray, interestArray и riskbandArray) возвращают полный набор информации, если я печатаю их сразу после forloop, тогда как если я напечатаю их прямо в конце метода viewDidload, он ничего не вернет. Я понимаю, что это, вероятно, происходит потому, что сетевой запрос выполняется в фоновом режиме, поэтому, когда я прошу распечатать свои массивы, ничего не возвращается, потому что он вызывается в основном потоке. Я попытался противодействовать этому, привлекая Grand Central Dispatch, но мои массивы все еще пустые. ТАК расстраивает.Почему мой массив массивов ничего не возвращает?
class CollectionViewController: UICollectionViewController {
var amountArray = [Int]()
var interestArray = [Double]()
var riskbandArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let session = NSURLSession.sharedSession()
let Url = NSURL(string: "http://fc-ios-test.herokuapp.com/auctions")
let task: NSURLSessionDownloadTask = session.downloadTaskWithURL(Url!) { (url, response, error) -> Void in
dispatch_async(dispatch_get_main_queue(), {() -> Void in
let data = NSData(contentsOfURL: url!)
do {
let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary
if let array = jsonData["items"] as? [[NSObject:AnyObject]] {
for item in array {
self.amountArray.append(item["amount_cents"] as! Int)
self.interestArray.append(item["rate"] as! Double * 100)
self.riskbandArray.append(item["risk_band"] as! String)
}
}
self.collectionView?.reloadData()
} catch {
print(error)
}
})
}
task.resume()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Register cell classes
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
// Do any additional setup after loading the view.
print(self.amountArray)
}
как ваш предыдущий вопрос: ваша задача асинхронна, поэтому не завершена, когда вы печатаете массив. – luk2302
нет способа изменить это? –
Я не знаю наверняка, что это было бы возможно, это было бы плохой идеей. Вместо этого переместите логику в зависимости от массива в блок завершения задачи. Если вы напечатаете массив, вы увидите, что все работает отлично. – luk2302