gpt4 book ai didi

iphone - Swift - 从 JSONElement 填充数组

转载 作者:行者123 更新时间:2023-11-28 08:17:08 28 4
gpt4 key购买 nike

我正在使用 JSONSerializer 从 SQL 数据库访问数据。我设法毫无问题地读取数据,并设法获取每个条目并为每个条目创建一个临时对象。我将每个对象添加到一个数组中。但是,当我在这个方法之外检查数组的长度时,它返回 0,而它应该返回 5。在整个方法中检查数组的长度时,它返回 5。有什么建议吗?

代码:

func getJson() {
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil
{
print("ERROR")
}
else
{
if let content = data
{

do{

let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

for index in 0..<myJson.count {

if let entry = myJson[index] as? NSDictionary{
let name = entry["Name"] as! String
let longitude = CLLocationDegrees(entry["Longitude"] as! String)
let latitude = CLLocationDegrees(entry["Latitude"] as! String)

let quiet = Int(entry["Quiet"] as! String)
let moderate = Int(entry["Moderate"] as! String)

let busy = Int(entry["Busy"] as! String)
let coordinate = CLLocationCoordinate2D( latitude: latitude!, longitude: longitude!)

let tempPark = CarPark(name: name, latitude: latitude!, longitude: longitude!, quiet: quiet!, moderate: moderate!, busy: busy!, coordinate: coordinate)

self.carParks.append(tempPark)
print("amount of parks: \(self.carParks.count)")
print("name of parks in array: \((self.carParks[index]))")
}

}

}
catch
{
print("Error")
}
}
}
}
print("amount of parks: \(self.carParks.count)")
task.resume()
}

最佳答案

看起来你的函数是异步工作的,这就是为什么当你试图计算它返回 0 的元素时,因为还没有元素。一旦完成,我将使用完成处理程序来检索数组。

func getJson(completion: @escaping (Array<ObjectType>) -> Void) {
.
.
.
.
completion(localCarParks)
.
.
.
.
}

在上面的函数中,您定义了将处理答案的完成处理程序。在函数内部,一旦您完成加载元素,您就可以使用 localCarPerks 数组调用处理程序。

要调用 getJson 函数,它会是这样的:

self.getJson { (array) in
// Here you do what you need with the array
}

关于iphone - Swift - 从 JSONElement 填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42274618/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com