gpt4 book ai didi

swift - 当将值更改为从 firebase 中提取的数据时,变量将恢复为初始值。怎样才能让值(value)留下来?

转载 作者:行者123 更新时间:2023-11-28 15:18:04 26 4
gpt4 key购买 nike

我正在 Xcode 中制作一个 swift 程序,它从 firebase 数据库中提取事件列表,为每个事件创建一个 TableView 单元格,并将所述单元格放入 TableView 中。问题在于,当我将存储事件的数组的值设置为它从 firebase 中提取的任何值时,该值会在我关闭快照后立即恢复。相关代码如下:

struct cellData {
let Title: String
let Date: String
let Time: String
let Desc: String
var Image: UIImage?
}

classTableViewController: UITableViewController {
var ref:DatabaseReference?
var arrayOfCellData = [cellData]()

override func viewDidLoad() {

ref = Database.database().reference()



ref?.child("Events").observeSingleEvent(of: .value, with {(snapshot) in

let data = snapshot.value as! NSArray

var i = 0
while(i < data.count) {
let event = data[i] as! NSArray


if(event[0] as! String == "TRUE") {
self.arrayOfCellData.append(cellData(
Title:event[1] as! String,
Date:event[2] as! String,
Time:event[3] as! String,
Desc:event[4] as! String,
Image: nil))


print(self.arrayOfCellData[i])


}



i += 1
}


})

print(arrayOfCellData.count)

}

}

根据这段代码,它应该单独打印每个事件(数据库中有两个事件),然后它应该打印数组中的事件总数。然而,这是在控制台中打印的内容:

0
cellData(Title: "Event #1", Date: "9/18/17", Time: "6:30 PM", Desc: "Generic Event Description", Image: nil)
cellData(Title: "Event #2", Date: "5/15/26", Time: "12:15 PM", Desc: "Please attend this event", Image: nil)

如您所见,快照在 View didLoad 方法之后运行。事实上,定义 TableView 的方法也在快照之前运行,导致调用不显示任何数据。

最佳答案

这可能会有所帮助:

我认为因为 observeSingleEvent 是一个异步调用,所以你需要使用完成处理程序来返回数据:

编写一个名为fetchData的函数,然后在viewDidLoad方法中使用它:(正如我在用法中提到的)

func fetchData(completionHandler: @escaping ([cellData]) -> Void) {
ref = Database.database().reference()



ref?.child("Events").observeSingleEvent(of: .value, with {(snapshot) in

let data = snapshot.value as! NSArray

var i = 0
while(i < data.count) {
let event = data[i] as! NSArray


if(event[0] as! String == "TRUE") {
self.arrayOfCellData.append(cellData(
Title:event[1] as! String,
Date:event[2] as! String,
Time:event[3] as! String,
Desc:event[4] as! String,
Image: nil))


print(self.arrayOfCellData[i])


}



i += 1
}


completionHandler(self.arrayOfCellData)
})


}

用法:

self.fetchData { fetchedArray in

print(fetchedArray)
}

关于swift - 当将值更改为从 firebase 中提取的数据时,变量将恢复为初始值。怎样才能让值(value)留下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518318/

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