如何访问API内部分配的变量?

问题描述 投票:-1回答:2

我正在尝试运行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的新值在全球范围内可访问?

ios swift xcode alamofire
2个回答
2
投票

正如@Don提到的,getWeatherData()是异步函数,API调用的结果将在函数调用完成后可用。你可以解决它:

var temperature = "" {
    didSet { weather.text = temperature }
}

override func viewDidLoad() {
    super.viewDidLoad()
    getWeatherData()
}

...
self.temperature = String(weatherJSON["main"]["temp"].double)
...


2
投票

将温度变量更改为如下所示。正如@Don在评论中提到的,您的Web请求是异步运行的,并在调用viewDidLoad后返回。

var temperature = "" {
    didSet {
        weather.text = temperature
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.