如何在Swift中将元素追加到全局数组(在for循环中)?

时间:2019-05-22 13:37:14

标签: arrays swift

我有一个空的全局数组。我唯一想做的简单事情就是向该数组添加一个元素。看来迅速地完成了这一看似简单的任务是困难的。我只剩下一个空数组,没有任何东西追加到我的全局数组中。

我可以看到它在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()

感谢您的帮助。在其他语言中,我习惯于将元素附加到现有数组的末尾,因此我确信这只是一个小错误。

1 个答案:

答案 0 :(得分:0)

首先,为什么不简单地做

hsArray.append(contentsOf: houses)

代替所有的for loop

for h in houses {
    hsArray.append(h)
    print(h.median_price)    
}

问题可能出在您使用hsArray的时间。查看使用hsArray后是否收到响应。