gpt4 book ai didi

ios - 对象未添加到数组中 - swift iOS

转载 作者:行者123 更新时间:2023-11-30 13:17:03 25 4
gpt4 key购买 nike

我试图将任务对象添加到一个名为“任务”的数组中,然后将它们按类别过滤到另一个名为“filteredTasks”的数组中。

    var tasks = [Task]()
var filteredTasks = [Task]()

override func viewDidLoad() {
super.viewDidLoad()
print(categoryPass)
loadTasks()
filterTasks(categoryPass!)
if filteredTasks.isEmpty {
filterTasks(categoryPass!)
}
print(filteredTasks)
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
self.locationManager.delegate = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.delegate = self
tableView.dataSource = self

// Do any additional setup after loading the view, typically from a nib.
}


func loadTasks() {
var taskTitle: String?
var id: String?
var distance: Double?
var category: String?

var locationDict: [String:CLLocation] = [:]
var refHandle = self.ref.child("tasks").observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
self.tasksDict = snapshot.value as? NSDictionary
for i in 0 ..< self.tasksDict!.count {
let taskId = self.tasksDict!.allKeys[i] as! String
print ("1")
id = taskId
print (taskId)
let task = self.tasksDict!.objectForKey(taskId) as! NSDictionary
print ("2")
let lat = task.objectForKey("latitude") as! String
let long = task.objectForKey("longitude") as! String
let latNum = Double(lat)! as CLLocationDegrees
let longNum = Double(long)! as CLLocationDegrees
taskTitle = task.objectForKey("title") as? String
category = task.objectForKey("category") as? String
print("3")
// print (taskTitle)
//print (category)

let pointLocation = CLLocation(latitude: latNum, longitude: longNum)
locationDict[taskId] = pointLocation
if (self.locationCurrent == nil) {
self.locationCurrent = self.locationManager.location!
}
print("4")
distance = round(self.locationCurrent!.distanceFromLocation(pointLocation))
var taskAddition = Task(title: taskTitle, id: id, distance: distance, category: category)
print (taskAddition)
self.tasks += [taskAddition]

}
})
}

func filterTasks(searchText: String, scope: String = "All") {
print("filter")
for i in 0 ..< tasks.count {
let taskId = tasksDict!.allKeys[i] as! String
// print (taskId)
let task = tasksDict!.objectForKey(taskId) as! NSDictionary
let taskCategory = task.objectForKey("category") as! String
if (taskCategory.lowercaseString.containsString(searchText.lowercaseString)) {
filteredTasks.append(task[i] as! Task)
}

}

self.tableView.reloadData()
}

数字 1、2、3 和 4 都在控制台中打印出来,但如果我尝试打印任务或filteredTasks,我会得到 [] 和计数 0。是否有原因导致任务不打印被添加到数组中?

最佳答案

你不能那样做。 observeEventType 方法是异步的。它采用闭包作为参数。它在关闭运行之前立即返回。

您需要重写 loadTasks 函数以获取完成闭包。然后,您可以使用任务数组填满后要执行的代码来调用它。请参阅我对此线程的回答以获取工作示例:

how to return value after the execution of the block? Swift

关于ios - 对象未添加到数组中 - swift iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111692/

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