我希望将雅虎金融api过滤到只有出价在0美元到10美元之间的股票



我目前正在使用AlamoFire和Json将雅虎金融api加载到我的应用程序中。我想过滤出价类别,只显示0美元到10美元之间的股票,我该怎么做。附言:我用的是swift。我希望有人能帮忙。非常感谢。我将在下面附上一些代码。

导入UIKit进口Alamofire结构StockSearchResult{var符号:字符串?var名称:字符串?var exchange:字符串?var assetType:String?}struct Stock{var ask:字符串?var averageDailyVolume:字符串?var bid:字符串?var bookValue:字符串?var changeNumeric:字符串?var changePercent:String?var dayHigh:字符串?var dayLow:字符串?vardivideendShare:字符串?vardividerendYield:字符串?var ebitda:字符串?var epsEstimateCurrentYear:字符串?var epsEstimateNextQtr:String?var epsEstimateNextYr:字符串?var eps:字符串?var fiftydayMovingAverage:字符串?var lastTradeDate:String?var last:字符串?var lastTradeTime:String?var marketCap:String?var companyName:String?var oneYearTarget:String?var open:字符串?var pegRatio:字符串?var peRatio:字符串?var previousClose:String?var priceBook:字符串?var priceSales:字符串?var shortRatio:字符串?var stockExchange:字符串?var符号:字符串?var twoHundredayMovingAverage:字符串?var volume:字符串?var yearHigh:字符串?var yearLow:字符串?var dataFields:[[String:String]]}结构ChartPoint{var日期:NSDate?var体积:Int?var打开:CGFloat?var关闭:CGFloat?var低:CGFloat?var高:CGFloat?}枚举图表时间范围{case一天、五天、十天、一个月、三个月、一年、五年}class SwiftStockKit{类函数从SearchTerm获取StocksFromSearchTerm(术语:字符串,完成:(stockInfoArray:[StockSearchResult])->()){dispatch_async(dispatch_get_global_queue(dispatch_queue_PRIORITY_DEFAULT,0)){让searchURL="http://autoc.finance.yahoo.com/autoc"Alamofire.request(.GET,searchURL,参数:["query":term,"region":2,"lang":"en"]).responseJSON{response-in如果让resultJSON=response.result.value为?[String:AnyObject]{如果让jsonArray=(resultJSON["ResultSet"]as![String:AnyObject])["Result"]as?[[String:String]]{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(符号符号:字符串,完成:(stock:stock)->()){dispatch_async(dispatch_get_global_queue(dispatch_queue_PRIORITY_DEFAULT,0)){let stockURL="http://query.yahooapis.com/v1/public/yql?q=select%20*%20来自%20yahoo.finance.报价%20其中%20symbol%20in%20(%22\(symbol)%22)&env=store%3A%2F%2Fdatatables.org/2Falltableswithkeys&format=json"Alamofire.request(.GET,stockURL).responseJSON{中的response如果让resultJSON=response.result.value为?[String:AnyObject]{如果让stockData=((resultJSON["query"]as![String:AnyObject])["results"]as![String:AnyObject])["quote"]作为?[String:AnyObject]{//漫长的创作,是的var dataFields=[[String:String]]()dataFields.append(["Ask":stockData["Ask"]作为?String??"N/A"])dataFields.append(["Average Daily Volume":stockData["AverageDailyVolume"]作为?String??"N/A"])dataFields.append(["Bid":stockData["Bide"]作为?String??"N/A"])dataFields.append(["Book Value":stockData["BookValue"]作为?String??"N/A"])dataFields.append(["Change":stockData["Change"]as?String??"N/A"])dataFields.append(["Percent Change":stockData["ChangeinPercent"]作为?String??"N/A"])dataFields.append(["Day High":stockData["DaysHigh"]作为?String??"N/A"])dataFields.append(["Day Low":stockData["DaysLow"]作为?String??"N/A"])dataFields.append(["Div/Share":stockData["DivindShare"]作为?String??"N/A"])dataFields.append(["Div Yield":stockData["DivindYield"]作为?String??"N/A"])dataFields.append(["EBITDA":stockData["息税折旧摊销前利润"]为?String??"N/A"])dataFields.append(["Current Yr EPS Estimate":stockData["EPSEestimateCurrentYear"]as?String??"N/A"])dataFields.append(["下一季度每股收益估算":stockData["EPSEstimateNextQuarter"]为?String??"N/A"])dataFields.append(["下一年每股收益估算":stockData["EPSEstimateNextYear"]作为?String??"N/A"])dataFields.append(["收益/份额":stockData["收益份额"]为?String??"N/A"])dataFields.append(["50D MA":stockData["FiftydayMovingAverage"]作为?String??"N/A"])dataFields.append(["Last Trade Date":stockData["LastTradeDate"]为?String??"N/A"])dataFields.append(["Last":stockData["LastTradePriceOnly"]为?String??"N/A"])dataFields.append(["Last Trade Time":stockData["LastTradeTime"]为?String??"N/A"])dataFields.append(["市值":stockData["MarketCapitalization"]为?String??"N/A"])dataFields.append(["Company":stockData["Name"]为?String??"N/A"])dataFields.append(["一年目标":stockData["OneyrTargetPrice"]作为?String??"N/A"])dataFields.append(["Open":stockData["Open"]as?String??"N/A"])dataFields.append(["PEG Ratio":stockData["PEGRatio"]作为?String??"N/A"])dataFields.append(["PE Ratio":stockData["PERatio"]作为?String??"N/A"])dataFields.append(["Previous Close":stockData["PreviousClose"]为?String??"N/A"])dataFields.append(["Price Book":stockData["PriceBook"]作为?String??"N/A"])dataFields.append(["Price Sales":stockData["PriceSales"]为?String??"N/A"])dataFields.append(["Short Ratio":stockData["ShortRatio"]作为?String??"N/A"])dataFields.append(["Stock Exchange":stockData["StockExchange"]作为?String??"N/A"])dataFields.append(["Symbol":stockData["Symbol]as?String??"N/A"])dataFields.append(["200D MA":stockData["TwoHundredayMovingAverage"]作为?String??"N/A"])dataFields.append(["Volume":stockData["Volume"]作为?String??"N/A"])dataFields.append(["52w High":stockData["YearHigh"]作为?String??"N/A"])dataFields.append(["52w Low":stockData["YearLow"]作为?String??"N/A"])let stock=库存(ask:dataFields[0].values.first,averageDailyVolume:dataFields[1].values.first,bid: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,dividerendShare:dataFields[8].values.first,dividerendYield: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,fiftydayMovingAverage:dataFields[15].values.first,lastTradeDate:dataFields[16].values.first,last:dataFields[17].values.first,lastTradeTime:dataFields[18].values.first,marketCap:dataFields[19].values.first,companyName:dataFields[20].values.first,oneYearTarget:dataFields[21].values.first,open:dataFields[22].values.first,pegRatio:dataFields[23].values.first,peRatio:dataFields[24].values.first,previousClose:dataFields[25].values.first,priceBook:dataFields[26].values.first,priceSales:dataFields[27].values.first,shortRatio:dataFields[28].values.first,stockExchange:dataFields[29].values.first,symbol:dataFields[30].values.first,twoHundredayMovingAverage:dataFields[31].values.first,volume:dataFields[32].values.first,yearHigh:dataFields[33].values.first,yearLow:dataFields[34].values.first,dataFields:dataFields)dispatch_async(dispatch_get_main_queue()){完工(库存:库存)}}}}}}

如果您提前知道要过滤1到10之间的数组,可以这样做。

struct Stock {
var currentPrice : Double
}
let aStock = Stock(currentPrice: 1.1)
let bStock = Stock(currentPrice: 20.4)
let cStock = Stock(currentPrice: 5.0)
let stocks = [aStock,bStock,cStock]
let filteredStocks = stocks.filter({$0.currentPrice >= 1.0 && $0.currentPrice <= 10.0 })

上面的代码只是下面代码的简写

var filteredStocks = [Stock]()
for stock in stocks {
if (stock.currentPrice >= 1.0 && stock.currentPrice <= 10.0) {
filteredStocks.append(stock)
}
}

如果你想让最小和最大范围更动态,你可以把它放在一个以最小和最大为参数的方法中。

func filter(stocks: [Stock], from min: Double, to max: Double){
return stocks.filter({$0.currentPrice >= min && $0.currentPrice <= max })
}

最新更新