Firestore 使用数据恢复实例化对象 Swift 5.0
Firestore instantiate objects with data recover Swift 5.0
我从快照中获取所有数据并使用这些数据创建一个对象列表。
我的问题:我无法 return 列表以在其他代码函数中使用我的对象。
我尝试浏览要创建的列表,使用我的快照来实现上面在我的代码中声明的新对象列表。
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([=12=])})
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)
}
}
我从快照中获取所有数据并使用这些数据创建一个对象列表。 我的问题:我无法 return 列表以在其他代码函数中使用我的对象。
我尝试浏览要创建的列表,使用我的快照来实现上面在我的代码中声明的新对象列表。
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([=12=])})
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)
}
}