【发布时间】:2021-03-26 19:41:03
【问题描述】:
我创建了一个 UITableview 并添加了一些显示几只股票(Apple、Tesla)名称的单元格。我还在我想要显示股票当前股价的单元格中添加了一个右细节文本标签。到目前为止,使用 Finnhub.io,我能够创建一个 API 调用并将当前价格数据存储在一个名为 decodedData 的变量中。我还能够在我的调试控制台中打印出这些数据。我目前面临的唯一问题是没有在 UI 单元格中显示调试控制台的数据。如果有人对如何解决此问题有任何想法,请告诉我。
这是我进行 API 调用和获取 URL 的代码:
struct StockManager {
let decoder = JSONDecoder()
var returnValue:String = ""
let stockUrl = "https://finnhub.io/api/v1/quote?token=AUTH_TOKEN"
mutating func fetchStock(stockName: String) -> String{
var stockValue:String = ""
let urlString = "\(stockUrl)&symbol=\(stockName)"
stockValue = performRequest(urlString: urlString)
return stockValue
}
func performRequest(urlString: String) -> String {
var retValue: String = ""
//Create a URL
if let url = URL(string: urlString){
//Create a url session
let session = URLSession(configuration: .default)
//Create task
let task = session.dataTask(with: url) { (data, response, error) in
if error != nil{
print(error)
return
}
if let safeData = data{
self.parseJSON(stockData: safeData)
}
//Start task
}
task.resume()
}
return retValue
}
func parseJSON(stockData: Data) -> String {
var returnValue: String = ""
var jsonValue: String = ""
do{
let decodedData = try decoder.decode(StockData.self, from: stockData)
let c:String = String(decodedData.c)
let h:String = String(decodedData.h)
let l:String = String(decodedData.l)
jsonValue = String(decodedData.c)
print(decodedData.c)
// let stockData = StockData(c: c, h: h, l: l)
}catch{
print("Error decoding, \(error)")
}
return jsonValue
}
}
这是我创建表格视图和单元格的代码:
var listOfStocks = ["AAPL", "TSLA"]
var listOfStocks2 = ["Apple": "AAPL", "Tesla": "TSLA"]
var stockManager = StockManager()
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listOfStocks.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// create cell
let cell = tableView.dequeueReusableCell(withIdentifier: "StockListCell", for: indexPath)
let jsonValue: String = ""
cell.textLabel?.text = listOfStocks[indexPath.row]
if let stock = cell.textLabel?.text{
stockManager.fetchStock(stockName: stock)
cell.detailTextLabel?.text = stock
}
return cell
}
我希望能够通过在上面的函数中编码来显示我当前的股票价格 (覆盖 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath))。如果有人对此问题有答案,请告诉我,谢谢!
【问题讨论】:
-
我认为 Rich 在这方面做得很好。
标签: ios swift rest uitableview stockquotes