我正在尝试创建一个股票分析警报应用程序,我希望从Alpha Vantage API获得JSON响应的第一个结果。我使用以下代码来执行此操作。
@IBAction func saveIsPressed(_ sender: UIButton) {
if let ticker = tickerTextField.text, let indicator = indicatorTextField.text, let timeInterval = timeIntervalTextField.text, let seriesType = seriesTypeTextField.text, let timePeriod = timePeriodTextField.text {
stock.ticker = ticker
stock.indicator = indicator
stock.timeInterval = timeInterval
stock.seriesType = seriesType
stock.timePeriod = timePeriod
print(stock.url)
Alamofire.request(stock.url, method: .get).responseJSON { response in
if response.result.isSuccess {
print("Success")
let stockJSON:JSON = JSON(response.result.value!)
print("Printing JSON")
print(stockJSON)
print("Printing Get Data")
self.getData(json: stockJSON)
} else {
print("Result wasn't a success")
}
}
}
}
func getData(json:JSON){
if let data = json["Technical Analysis: BBANDS"].first {
print(data)
}
}
问题出在getData方法,我只想从请求中访问最新的元素,所以我使用json [“Technical Analysis:BBANDS”]。首先总是从请求中获取第一个对象,但是这个对象,我想要访问其他三个对象。此JSON API请求返回以下代码:
("2018-04-05 15:45", {
"Real Upper Band" : "1045.9855",
"Real Middle Band" : "1018.0134",
"Real Lower Band" : "990.0413"
})
结果来自getDataJSON.first方法,并且因为我已经访问了请求的第一个元素,所以我想进一步增加它并访问前者中的其他三个元素,即中间,下部和上部带对象,但我找不到这样做的方法,因为它返回一个不允许下标的JSON.Element。获取请求的第一个元素然后访问第一个元素的元素的最佳方法是什么。
答案 0 :(得分:1)
如果我理解你,你可以这样做:
if let mostRecentElement = json["Technical Analysis: BBANDS"].max(by: { $0.0 < $1.0 }) {
let dateString = mostRecentElement.0
let values = mostRecentElement.1
}