我有一个空的全局数组。我唯一想做的简单事情就是向该数组添加一个元素。看来迅速地完成了这一看似简单的任务是困难的。我只剩下一个空数组,没有任何东西追加到我的全局数组中。
我可以看到它在for循环中输出了值。因此值实际上在那里。
这是我在全局范围内声明的内容(是的,我知道全局变量是错误的,但我稍后会进行整理):
struct HouseDetails: Decodable {
let median_price: String
let sale_year: String
let transaction_count: String
let type: String
}
var hsArray: [HouseDetails] = []
以及在viewDidLoad()函数中,我具有要存储在局部变量“ houses”中的数据。当我遍历该数组时,它会打印median_price,表明值在那里。
但是,当我执行hsArray.append(h)时,它似乎什么也没做。
let jsonUrlString = "https://data.melbourne.vic.gov.au/resource/i8px-csib.json"
guard let url = URL(string: jsonUrlString)
else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else { return }
do {
let houses = try JSONDecoder().decode([HouseDetails].self, from: data)
for h in houses {
hsArray.append(h)
print(h.median_price)
}
}
catch let jsonErr {
print("Error with json serialization", jsonErr)
}
}.resume()
感谢您的帮助。在其他语言中,我习惯于将元素附加到现有数组的末尾,因此我确信这只是一个小错误。
答案 0 :(得分:0)
首先,为什么不简单地做
hsArray.append(contentsOf: houses)
代替所有的for loop
for h in houses {
hsArray.append(h)
print(h.median_price)
}
问题可能出在您使用hsArray
的时间。查看使用hsArray
后是否收到响应。