1
我不能解決爲什麼我的數組(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