我试图运行API函数,更改变量,然后在视图中显示这些结果。
我查看了Stack Overflow上的其他解决方案,但不了解其中任何一个。
因此,我写了一些虚拟代码只是为了说明我的意思。它看起来简单,但是却非常令人沮丧和复杂。
import UIKit
import Alamofire
import SwiftyJSON
class HomeViewController: UIViewController {
@IBOutlet weak var weather: UILabel!
var temperature = ""
override func viewDidLoad() {
super.viewDidLoad()
getWeatherData()
weather.text = temperature // This still returns an empty string
}
func getWeatherData() {
Alamofire.request("http://api.openweathermap.org/data/2.5/weather", method: .get).responseJSON {
response in
if response.result.isSuccess {
print("Success! Got the weather data")
let weatherJSON : JSON = JSON(response.result.value!)
temperature = String(weatherJSON["main"]["temp"].double)
} else {
print("Error \(String(response.result.error))")
}
}
}
}
如何使temperature
的新值可全局访问?
答案 0 :(得分:2)
@Don所说的getWeatherData()
是异步函数,函数调用完成后,API调用的结果将可用。您可以将其解决为:
var temperature = "" {
didSet { weather.text = temperature }
}
override func viewDidLoad() {
super.viewDidLoad()
getWeatherData()
}
...
self.temperature = String(weatherJSON["main"]["temp"].double)
...
答案 1 :(得分:2)
将温度变量更改为如下所示。正如@Don在其评论中提到的那样,您的Web请求正在异步运行,并在调用viewDidLoad
之后返回。
var temperature = "" {
didSet {
weather.text = temperature
}
}