gpt4 book ai didi

swift - Json 雅虎 API 错误

转载 作者:行者123 更新时间:2023-11-30 10:06:24 29 4
gpt4 key购买 nike

我一直在开发一个使用雅虎财经的 json 获取股票数据的应用程序,但我在错误代码中遇到了问题。它在 else 语句中显示未解析的标识符 jsonDict 和预期的表达式错误。

这是代码。

import Foundation

let kNotificationStocksUpdated = "stocksUpdated"

class StockManagerSingleton {

//Singleton Init
class var sharedInstance : StockManagerSingleton {
struct Static {
static let instance : StockManagerSingleton = StockManagerSingleton()
}
return Static.instance
}

/*!
* @discussion Function that given an array of symbols, get their stock prizes from yahoo and send them inside a NSNotification UserInfo
* @param stocks An Array of tuples with the symbols in position 0 of each tuple
*/
func updateListOfSymbols(stocks:Array<(String,Double)>) ->() {

//1: YAHOO Finance API: Request for a list of symbols example:
//http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol IN ("AAPL","GOOG","FB")&format=json&env=http://datatables.org/alltables.env

//2: Build the URL as above with our array of symbols
var stringQuotes = "(";
for quoteTuple in stocks {
stringQuotes = stringQuotes+"\""+quoteTuple.0+"\","
}
stringQuotes = stringQuotes.substringToIndex(stringQuotes.endIndex.predecessor())
stringQuotes = stringQuotes + ")"

let urlString:String = ("http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol IN "+stringQuotes+"&format=json&env=http://datatables.org/alltables.env").stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
let url : NSURL = NSURL(string: urlString)!

let request: NSURLRequest = NSURLRequest(URL:url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

//3: Completion block/Clousure for the NSURLSessionDataTask
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in

do {
if let _ = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary {
// Success block...
}
} catch {
print(error)
}

else {
//5: Extract the Quotes and Values and send them inside a NSNotification
var quotes:NSArray = ((jsonDict.objectForKey("query") as NSDictionary).objectForKey("results") as NSDictionary).objectForKey("quote") as NSArray
dispatch_async(dispatch_get_main_queue(), {
NSNotificationCenter.defaultCenter().postNotificationName(kNotificationStocksUpdated, object: nil, userInfo: [kNotificationStocksUpdated:quotes])
})
}
})


//6: DONT FORGET to LAUNCH the NSURLSessionDataTask!!!!!!
task.resume()
}
}

有问题的代码行是。

var quotes:NSArray = ((jsonDict.objectForKey("query") as NSDictionary).objectForKey("results") as NSDictionary).objectForKey("quote") as NSArray

最佳答案

目前您有一些没有意义的代码。例如else没有对应的if。我不知道你想用你的代码做什么,但它看起来应该类似于下面的内容。请注意,这也会是错误的。您需要返回原始代码的来源,因为您当前的代码将永远无法工作。

func updateListOfSymbols(stocks:Array<(String,Double)>) ->() {

//1: YAHOO Finance API: Request for a list of symbols example:
//http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol IN ("AAPL","GOOG","FB")&format=json&env=http://datatables.org/alltables.env

//2: Build the URL as above with our array of symbols
var stringQuotes = "(";
for quoteTuple in stocks {
stringQuotes = stringQuotes+"\""+quoteTuple.0+"\","
}
stringQuotes = stringQuotes.substringToIndex(stringQuotes.endIndex.predecessor())
stringQuotes = stringQuotes + ")"

let urlString:String = ("http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol IN "+stringQuotes+"&format=json&env=http://datatables.org/alltables.env").stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
let url : NSURL = NSURL(string: urlString)!

let request: NSURLRequest = NSURLRequest(URL:url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

//3: Completion block/Clousure for the NSURLSessionDataTask
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in

do {
if let jsonDict = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary {
// Success block...
//5: Extract the Quotes and Values and send them inside a NSNotification
var quotes:NSArray = ((jsonDict.objectForKey("query") as NSDictionary).objectForKey("results") as NSDictionary).objectForKey("quote") as NSArray
dispatch_async(dispatch_get_main_queue(), {
NSNotificationCenter.defaultCenter().postNotificationName(kNotificationStocksUpdated, object: nil, userInfo: [kNotificationStocksUpdated:quotes])
})
}
} catch {
print(error)
}

})


//6: DONT FORGET to LAUNCH the NSURLSessionDataTask!!!!!!
task.resume()
}

关于swift - Json 雅虎 API 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713531/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com