我正在尝试以 JSON 格式从 Yahoo finance API 获取 Price
和 Change
数据。 Apple Stock API
然而,在解包数据时存在一些问题。该程序在执行 for jsonObjectString in resultArray!
时显示问题。我怀疑它没有找到数据,因为调试期间的错误是fatal error: unexpectedly found nil while unwrapping an Optional value
func GetPrice(){
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: NSURL(string: "https://query.yahooapis.com/v1/public/yql?q=select%20price%2C%20change%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3DA17U.SI%26f%3Dsl1d1t1c1ohgv%26e%3D.csv'%20and%20columns%3D'symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Ccol2'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys")!)
request.HTTPMethod = "GET"
let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
if let error = error {
print(error)
}
if let data = data{
do{
let resultJSON = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
let resultArray = resultJSON as? NSArray
for jsonObjectString in resultArray!{
let price = jsonObjectString["price"] as! String
let change = jsonObjectString["change"] as! String
self.priceList.append(PriceTable(stockCode: self.blueChipList[self.index].stockName, price: price, change: change))
}
dispatch_async(dispatch_get_main_queue(), {self.tableView.reloadData()})
}catch _{
print("Received not-well-formatted JSON")
}
}
if let response = response {
let httpResponse = response as! NSHTTPURLResponse
print("response code = \(httpResponse.statusCode)")
}
})
task.resume()
}
最佳答案
resultJSON 是字典,这就是当您将其转换为 NSArray
时它返回 nil 的原因。
如果您想获取价格和零钱的值(value),请试试这个。
let resultDict = resultJSON as? NSDictionary
let queryDict = resultDict["query"]
let resultsDict = queryDict["results"]
let rowDict = resultsDict["row"]
let price = rowDict["price"] as! String
let change = rowDict["change"] as! String
关于ios - 使用 Swift 解包 Yahoo API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929967/