gpt4 book ai didi

arrays - Firestore实例化对象与数据恢复Swift 5.0

转载 作者:行者123 更新时间:2023-11-30 10:45:59 27 4
gpt4 key购买 nike

我从快照中获取所有数据,并使用这些数据创建一个对象列表。我的问题:我无法返回列表以在其他代码函数中使用我的对象。

我尝试浏览我的列表以使用我的快照创建,以实现上面在我的代码中声明的新对象列表。

class ViewController: UIViewController {

lazy var usersCollection = Firestore.firestore().collection("ship")
var ships: [MyShip] = []

override func viewDidLoad() {
super.viewDidLoad()

getUsers()
print(ships.count)


}

getData 函数:

 func getUsers() {
usersCollection.getDocuments { (snapshot, _) in

//let documents = snapshot!.documents
// try! documents.forEach { document in

//let myUser: MyUser = try document.decoded()
//print(myUser)
//}

let myShip: [MyShip] = try! snapshot!.decoded()

// myShip.forEach({print($0)})


for elt in myShip {
print(elt)
self.ships.append(elt)
}
print(self.ships[1].nlloyds)
}
}

result console

控制台结果:

- my list is not filled return 0
- I print the objects well and I print them well
- I print the ships object[1].nloyds = 555 well in the function

最佳答案

您在 viewDidLoad 中的 print(ships.count) 调用正在打印一个空数组,因为 .getDocuments() 方法是异步的。尝试将 getUsers 编写为如下所示的闭包:

func getUsers(completion: @escaping ([MyShip]) -> Void) {
usersCollection.getDocuments { (snapshot, _) in
let myShip: [MyShip] = try! snapshot!.decoded()
completion(myShip)
}
}

然后在 viewDidLoad 方法中使用它,如下所示:

override func viewDidLoad() {
super.viewDidLoad()

getUsers() { shipsFound in
self.ships = shipsFound
print(self.ships.count)
}

}

关于arrays - Firestore实例化对象与数据恢复Swift 5.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55759712/

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