gpt4 book ai didi

ios - 如何使类中的初始化方法等待 Firestore 在 Swift 4 中完成?

转载 作者:行者123 更新时间:2023-11-29 05:57:56 25 4
gpt4 key购买 nike

我正在调用一个函数,该函数初始化一个类,并且在该类中我有一个初始化方法来向 Firestore 发出请求。我在该类中还有一个变量,在其中完成数据库循环后,我将这个 self.variable 更改为等于我刚刚创建的值。由于某种原因,我无法完成此操作,并且当我初始化类对象时,变量的值永远不会改变。

(假设用户类别仅包含姓名和年龄)

这是我调用函数并初始化对象的地方

fileprivate func fetch(){
let homeObject = Home()
print (homeObject.user.count)
//count prints out as 0
print (homeObject.test)
//test prints out as 2 .. should be 3 but I'm not sure why?
}

这是 Home 类

class Home{
var user: [User] = []
var test = 1
required init() {
self.test = 2
var userLoop = [User]()
let db = Firestore.firestore()
db.collection("users").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {

print("\(document.documentID) => \(document.data())")

let name_data = document.data()["name"]! as! String
let age_data = document.data()["age"]! as! String

let userTemp = User(name: name_data , age: age_data)

self.test = 3
userLoop.append(userTemp)
}
self.user = userLoop

}
}
}

由于某种原因,测试能够更改为数字 2,但我相信这个初始化方法没有完成,因为它不会转到数字 3(如您在上面看到的,稍后在初始化函数中)我将其更改为数字 3)。我真的很感谢您的帮助,现在已经坚持了几个小时了!

最佳答案

使用如下完成 block 初始化Home:

class Home{
var user: [User] = []
required init(with block: (Home)->Void) {
var userLoop = [User]()
let db = Firestore.firestore()
db.collection("users").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {

print("\(document.documentID) => \(document.data())")

let name_data = document.data()["name"]! as! String
let age_data = document.data()["age"]! as! String

let userTemp = User(name: name_data , age: age_data)

userLoop.append(userTemp)
}
self.user = userLoop

}
block(self)
}
}
}

并将其命名为:

var home = Home { (home) in
//set your properties if needed.
}

关于ios - 如何使类中的初始化方法等待 Firestore 在 Swift 4 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965130/

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