首先,我初始化变量以保存股票数据。
var applePrice: String?
var googlePrice: String?
var twitterPrice: String?
var teslaPrice: String?
var samsungPrice: String?
var stockPrices = [String]()
我从YQL获取当前股票价格,并将这些值放入数组中。
func stockFetcher() {
Alamofire.request(stockUrl).responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
let json = JSON(responseData.result.value!)
if let applePrice = json["query"]["results"]["quote"][0]["Ask"].string {
print(applePrice)
self.applePrice = applePrice
self.tableView.reloadData()
}
if let googlePrice = json["query"]["results"]["quote"][1]["Ask"].string {
print(googlePrice)
self.googlePrice = googlePrice
self.tableView.reloadData()
}
if let twitterPrice = json["query"]["results"]["quote"][2]["Ask"].string {
print(twitterPrice)
self.twitterPrice = twitterPrice
self.tableView.reloadData()
}
if let teslaPrice = json["query"]["results"]["quote"][3]["Ask"].string {
print(teslaPrice)
self.teslaPrice = teslaPrice
self.tableView.reloadData()
}
if let samsungPrice = json["query"]["results"]["quote"][4]["Ask"].string {
print(samsungPrice)
self.samsungPrice = samsungPrice
self.tableView.reloadData()
}
let stockPrices = ["\(self.applePrice)", "\(self.googlePrice)", "\(self.twitterPrice)", "\(self.teslaPrice)", "\(self.samsungPrice)"]
self.stockPrices = stockPrices
print(json)
}
}
}
在“cellForRowAt indexPath”函数中,我将文本输出到标签中。
if self.stockPrices.count > indexPath.row + 1 {
cell.detailTextLabel?.text = "Current Stock Price: \(self.stockPrices[indexPath.row])" ?? "Fetching stock prices..."
} else {
cell.detailTextLabel?.text = "No data found"
}
我遇到了一个问题,需要打印当前股票价格:Optional("stock price"),其中包含单词optional。我猜测这是因为我给它提供了一个可选值的数组,但实际上我不知道是否会从YQL获取数据,其中5只股票中可能有一只是nil,而其他股票则有数据。从阅读其他类似的问题中,我可以看出解决方案是使用!来解包值,但当它是一个可能为空的数据数组时,我不太确定如何实现该解决方案,而不仅仅是一个Int或其他数据类型。
如何安全地解包并消除Optional这个单词?
[self.applePrice, self.googlePrice,...]
),但 Duncan 的方法是正确的。 - Paulw11