-1
JSON Yahoo APIのデータをいくつかのUILabelsに入れようとしています。 プロジェクトを実行しようとすると、スレッド1のエラーが表示されます。AlamoFireとSwiftを使用してJSONデータをUILabelに入れる方法
struct Stock { var ask: String? var averageDailyVolume: String? var bid: String? var bookValue: String? var changeNumeric: String? var changePercent: String? var dayHigh: String? var dayLow: String? var dividendShare: String? var dividendYield: String? var ebitda: String? var epsEstimateCurrentYear: String? var epsEstimateNextQtr: String? var epsEstimateNextYr: String? var eps: String? var fiftydayMovingAverage: String? var lastTradeDate: String? var last: String? var lastTradeTime: String? var marketCap: String? var companyName: String? var oneYearTarget: String? var open: String? var pegRatio: String? var peRatio: String? var previousClose: String? var priceBook: String? var priceSales: String? var shortRatio: String? var stockExchange: String? var symbol: String? var twoHundreddayMovingAverage: String? var volume: String? var yearHigh: String? var yearLow: String? var dataFields: [[String : String]] }
と私はまた、データを表示する能力を妨げることが異なるstockurl私swiftStockKitファイルを持っている:
@IBOutlet weak var tableView: UITableView!
var stockSymbol: String = "AAPL"
var stock: [Stock] = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
tableView.registerNib(UINib(nibName: "HomeCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "homeCell")
tableView.rowHeight = 60
// Do any additional setup after loading the view.
SwiftStockKit.fetchStockForSymbol(symbol: stockSymbol) { (stock) ->() in
self.stock = [stock]
self.tableView.reloadData()
}
}
class func fetchStockForSymbol(symbol symbol: String, completion:(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*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&format=json"
Alamofire.request(.GET, stockURL).responseJSON { response in
if let resultJSON = response.result.value as? [String : AnyObject] {
if let stockData = ((resultJSON["query"] as! [String : AnyObject])["results"] as! [String : AnyObject])["quote"] as? [String : AnyObject] {
// lengthy creation, yeah
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(["Price-Book" : 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"])
let stock = 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,
dividendShare: dataFields[8].values.first,
dividendYield: 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,
twoHundreddayMovingAverage: 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()) {
completion(stock: stock)
}
}
}
}
}
}
これは構造体である:ここでは
は、私のコードの一部でありますUILabelに
let stockURL = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&format=json"
と残りは同じです。
をありがとうあなたの答えは、すぐに質問がありました。私は本質的にStock構造体コードをそのまま使用しましたが、 クラスfunc fetchPennyStockForBidAndFilter(シンボルシンボル:String、bid:String、completion :(フィルタリングストック:filteredStock) - >()) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT、0)){}}を追加しました。まず、私はこのことが正しいかどうかを知りたいのですが、次に、urlからの情報をどのようにuilabelに入れるのでしょうか。ありがとうございました。 –
なぜ 'dispatch_async'を補完ハンドラのバックグラウンドキューに呼び出すのか分かりません。 'UILabel'のテキストを設定したい場合は、それをメインキューにディスパッチしてください。そして、あなたは 'UILabel'にどのような情報を表示したいですか?例えば、質問価格を表示するには、単に 'label.text =" \(filteredStock.ask) "'(NSNumberFormatterを使うのが良い) –
okありがとうございます。私はシンボルと入札を表示する予定です。 –