我想创建一个天气应用程序,为了做到这一点,我需要解析出JSON。这可以工作,(我知道是因为我通过打印测试过),但是我无法改变我得到的数据的值到一个已经初始化的全局变量。之前有人问过类似的问题,但即使使用提供的答案,我也无法解决自己的问题。如何更改函数中全局变量的值以便稍后使用?
以下行是我初始化我的全局变量:
var currentTemperature = 88
var currentTime = 789
而下面行是我解析JSON和测试在我viewDidLoad中功能打印:
let url = URL(string: "https://api.darksky.net/forecast/c269e5928cbdadde5e9d4040a5bd4833/42.1784,-87.9979")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print("error")
}
else {
if let content = data {
do {
let json = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
if let jsonCurrently = json["currently"] as? NSDictionary {
if let jsonCurrentTime = jsonCurrently["time"] {
currentTime = jsonCurrentTime as! Int
print(currentTime)
}
if let jsonCurrentTemperature = jsonCurrently["temperature"] {
currentTemperature = jsonCurrentTemperature as! Int
print(currentTemperature)
}
}
} catch {
}
}
}
}
task.resume()
我用在不同的类中设置标签文本时的全局变量:(但是,只有初始值设置为变量,而不是来自解析的JSON的初始值)
let currentTemperatureLabel: UILabel = {
//label of the current temperature
let label = UILabel()
label.text = String(currentTemperature) + "°"
label.textColor = UIColor(red: 150/255, green: 15/255, blue: 15/255, alpha: 0.8)
label.textAlignment = NSTextAlignment.center
label.font = UIFont(name: "Damascus", size: 130)
label.font = UIFont.systemFont(ofSize: 130, weight: UIFontWeightLight)
return label
}()
的JSON例如要求可以在这里找到:https://darksky.net/dev/docs#api-request-types
不管我做什么,我不能够从JSON使用数据时,我试图访问之前提到的两个全局变量。
的部分评论的答案是,所有你正在做的初始化的全局变量?你把它们存储在一个静态实例中吗?你以后如何访问它们? –
你可以展示你解析的JSON的例子吗? – ColGraff
由于我是Xcode的新手,我真的不知道如何回答Shamas的第2个问题,但我更新了帖子以回答第三个问题并回答ColGraff的问题。 –