【发布时间】:2026-01-31 23:55:02
【问题描述】:
我目前正在使用 AlamoFire 和 Json 将 yahoo Finance api 安装到我的应用程序中。我想过滤出价类别以仅显示介于 0 美元到 10 美元之间的股票我将如何执行此操作。附言我正在使用迅速。我希望有人能帮帮忙。非常感谢。下面我会附上一些代码。
导入 UIKit
进口阿拉莫火
结构股票搜索结果 {
var 符号:字符串?
变量名称:字符串?
var 交换:字符串?
变量资产类型:字符串?
}
结构股票{
var 问:字符串?
var averageDailyVolume:字符串?
var 出价:字符串?
var bookValue:字符串?
var changeNumeric: 字符串?
var changePercent: 字符串?
var dayHigh:字符串?
var dayLow:字符串?
var 股息共享:字符串?
var 股息收益率:字符串?
var ebitda: 字符串?
var epsEstimateCurrentYear:字符串?
var epsEstimateNextQtr:字符串?
var epsEstimateNextYr:字符串?
var eps: 字符串?
var 五十天移动平均:字符串?
var lastTradeDate:字符串?
var last:字符串?
var lastTradeTime: 字符串?
var marketCap:字符串?
var companyName: 字符串?
var oneYearTarget:字符串?
var open: 字符串?
var pegRatio:字符串?
var perRatio:字符串?
var previousClose: 字符串?
var priceBook:字符串?
var priceSales:字符串?
var shortRatio:字符串?
var stockExchange:字符串?
var 符号:字符串?
var twoHundreddayMovingAverage:字符串?
var 卷:字符串?
var yearHigh:字符串?
var yearLow:字符串?
var 数据字段:[[字符串:字符串]]
}
结构图点 {
变量日期:NSDate?
var 音量:整数?
var open: CGFloat?
var close: CGFloat?
var 低:CGFloat?
变量高:CGFloat?
}
枚举 ChartTimeRange {
案例 OneDay, FiveDays, TenDays, OneMonth, ThreeMonths, OneYear, FiveYears
}
类 SwiftStockKit {
类 func fetchStocksFromSearchTerm(term term: String, completion:(stockInfoArray: [StockSearchResult]) -> ()) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
让 searchURL = "http://autoc.finance.yahoo.com/autoc"
Alamofire.request(.GET, searchURL, parameters: ["query": term, "region": 2, "lang": "en"]).responseJSON { response in
如果让 resultJSON = response.result.value 为? [字符串:任何对象] {
if let jsonArray = (resultJSON["ResultSet"] as! [String : AnyObject])["Result"] as? [[字符串:字符串]] {
var stockInfoArray = [StockSearchResult]()
对于 jsonArray 中的字典 {
stockInfoArray.append(StockSearchResult(symbol: dictionary["symbol"], name: dictionary["name"], exchange: dictionary["exchDisp"],assetType: dictionary["typeDisp"]))
}
dispatch_async(dispatch_get_main_queue()) {
完成(stockInfoArray:stockInfoArray)
}
}
}
}
}
}
类 func fetchStockForSymbol(符号符号:字符串,完成:(股票:股票)->()){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let stockURL = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22\(symbol)% 22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&format=json"
Alamofire.request(.GET, stockURL).responseJSON { 响应
如果让 resultJSON = response.result.value 为? [字符串:任何对象] {
if let stockData = ((resultJSON["query"] as! [String : AnyObject])["results"] as! [String : AnyObject])["quote"] as? [字符串:任何对象] {
// 漫长的创作,是的
var dataFields = [[String : String]]()
dataFields.append(["Ask" : stockData["Ask"] as? String ?? "N/A"])
dataFields.append(["Average Daily Volume" : stockData["AverageDailyVolume"] as? String ?? "N/A"])
dataFields.append(["Bid" : stockData["Bid"] as? String ?? "N/A"])
dataFields.append(["Book Value" : stockData["BookValue"] as?String ?? "N/A"])
dataFields.append(["Change" : stockData["Change"] as?String ?? "N/A"])
dataFields.append(["Percent Change" : stockData["ChangeinPercent"] as? String ?? "N/A"])
dataFields.append(["Day High" : stockData["DaysHigh"] as? String ?? "N/A"])
dataFields.append(["Day Low" : stockData["DaysLow"] as?String ?? "N/A"])
dataFields.append(["Div/Share" : stockData["DividendShare"] as?String ?? "N/A"])
dataFields.append(["Div Yield" : stockData["DividendYield"] as? String ?? "N/A"])
dataFields.append(["EBITDA" : stockData["EBITDA"] as? String ?? "N/A"])
dataFields.append(["Current Yr EPS Estimate" : stockData["EPSEstimateCurrentYear"] as? String ?? "N/A"])
dataFields.append(["Next Qtr EPS Estimate" : stockData["EPSEstimateNextQuarter"] as?String ??"N/A"])
dataFields.append(["Next Yr EPS Estimate" : stockData["EPSEstimateNextYear"] as? String ?? "N/A"])
dataFields.append(["Earnings/Share" : stockData["EarningsShare"] as?String ?? "N/A"])
dataFields.append(["50D MA" : stockData["FiftydayMovingAverage"] as? String ?? "N/A"])
dataFields.append(["Last Trade Date" : stockData["LastTradeDate"] as?String ?? "N/A"])
dataFields.append(["Last" : stockData["LastTradePriceOnly"] as? String ?? "N/A"])
dataFields.append(["Last Trade Time" : stockData["LastTradeTime"] as? String ?? "N/A"])
dataFields.append(["Market Cap" : stockData["MarketCapitalization"] as?String ?? "N/A"])
dataFields.append(["Company" : stockData["Name"] as? String ?? "N/A"])
dataFields.append(["One Yr Target" : stockData["OneyrTargetPrice"] as? String ?? "N/A"])
dataFields.append(["Open" : stockData["Open"] as?String ?? "N/A"])
dataFields.append(["PEG Ratio" : stockData["PEGRatio"] as? String ?? "N/A"])
dataFields.append(["PE Ratio" : stockData["PERatio"] as? String ?? "N/A"])
dataFields.append(["Previous Close" : stockData["PreviousClose"] as?String ?? "N/A"])
dataFields.append(["PriceBook" : stockData["PriceBook"] as?String ?? "N/A"])
dataFields.append(["Price-Sales" : stockData["PriceSales"] as? String ?? "N/A"])
dataFields.append(["Short Ratio" : stockData["ShortRatio"] as? String ?? "N/A"])
dataFields.append(["Stock Exchange" : stockData["StockExchange"] as? String ?? "N/A"])
dataFields.append(["Symbol" : stockData["Symbol"] as? String ?? "N/A"])
dataFields.append(["200D MA" : stockData["TwoHundreddayMovingAverage"] as? String ?? "N/A"])
dataFields.append(["Volume" : stockData["Volume"] as?String ?? "N/A"])
dataFields.append(["52w High" : stockData["YearHigh"] as?String ?? "N/A"])
dataFields.append(["52w Low" : stockData["YearLow"] as? String ?? "N/A"])
让股票=股票(
问:dataFields[0].values.first,
averageDailyVolume: dataFields[1].values.first,
出价:dataFields[2].values.first,
bookValue: dataFields[3].values.first,
changeNumeric: dataFields[4].values.first,
changePercent: dataFields[5].values.first,
dayHigh: dataFields[6].values.first,
dayLow:dataFields[7].values.first,
股息共享:dataFields[8].values.first,
股息收益率:dataFields[9].values.first,
ebitda: dataFields[10].values.first,
epsEstimateCurrentYear: dataFields[11].values.first,
epsEstimateNextQtr: dataFields[12].values.first,
epsEstimateNextYr: dataFields[13].values.first,
eps: dataFields[14].values.first,
五十天移动平均:dataFields[15].values.first,
lastTradeDate: dataFields[16].values.first,
最后:dataFields[17].values.first,
lastTradeTime: dataFields[18].values.first,
市场资本:dataFields[19].values.first,
公司名称:dataFields[20].values.first,
oneYearTarget: dataFields[21].values.first,
打开:dataFields[22].values.first,
pegRatio: dataFields[23].values.first,
peRatio: dataFields[24].values.first,
上一个关闭:dataFields[25].values.first,
priceBook: dataFields[26].values.first,
priceSales: dataFields[27].values.first,
shortRatio:dataFields[28].values.first,
证券交易所:dataFields[29].values.first,
符号:dataFields[30].values.first,
twoHundreddayMovingAverage:dataFields[31].values.first,
卷:dataFields[32].values.first,
yearHigh:dataFields[33].values.first,
yearLow:dataFields[34].values.first,
数据字段:数据字段
)
dispatch_async(dispatch_get_main_queue()) {
完成(库存:库存)
}
}
}
}
}
}
【问题讨论】:
-
您是要在从 api 获得响应并过滤
stockData后过滤股票,还是使用 AlamoFire 发出请求并在stockURL中应用参数。 -
@Asdrubal 理想情况下我想将参数应用于 stockUrl,但我觉得对 stockData 应用过滤器会更容易,我只是还没有找到方法
标签: json swift alamofire yahoo-api yahoo-finance