gpt4 book ai didi

swift - 我想在 dequeueReusableCell 中获取 firestore 数据

转载 作者:行者123 更新时间:2023-11-30 10:56:51 24 4
gpt4 key购买 nike

我重写了所有的文本,现在我得到了我想要实现的代码。tableCell上无法显示,布局也塌陷。很抱歉我写的代码和正文解释不够。

guard让userID = Auth.auth()。当前用户? .uid 我想始终使用 else {return} 获取 userID。

//guard let docSnapshot = querySnapshot, document.exists else {return}

由于发生错误,因此将其注释掉。

UIViewController 的 viewidLoad 内

var profDict: [ProfDic] = [] 在 UIViewController 中。

profUIView 正在添加到 UIViewController。

    func getFirebaseData() {

db = Firestore.firestore()

guard let userID = Auth.auth().currentUser?.uid else {return}


let ref = db.collection("users").document(userID)

ref.getDocument{ (document, error) in

if let document = document {
// guard let docSnapshot = querySnapshot, document.exists else {return}
if let prof = ProfDic(dictionary: document.data()!) {

self.profDict.append(prof)

print("Document data \(document.data())")
}
}else{
print("Document does not exist")
}

self.profUIView.tableView1.reloadData()
}

}

tableView1 已添加到 ProfUIView。

class ProfUIView: UIView, UITableViewDelegate, UITableViewDataSource {

//omission...

override init(frame: CGRect) {
super.init(frame: frame)

backgroundColor = .blue

addSubview(tableView1)
tableView1.anchor(top: //omission...

sections = [
Section(type: .prof_Sec, items: [.prof]),
Section(type: .link_Sec, items: [.link]),
Section(type: .hoge_Sec, items: [.hoge0])
]

tableView1.register(TableCell0.self, forCellReuseIdentifier: TableCellId0)
tableView1.register(TableCell3.self, forCellReuseIdentifier: TableCellId3)
tableView1.register(TableCell5.self, forCellReuseIdentifier: TableCellId5)



tableView1.delegate = self
tableView1.dataSource = self

}

var tableView1:UITableView = {
let table = UITableView()
table.backgroundColor = .gray
return table
}()

//omission

func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (baseVC?.profDict.count)!//sections[section].items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch sections[indexPath.section].items[indexPath.row] {
case .prof:
let cell0 = tableView.dequeueReusableCell(withIdentifier: TableCellId0, for: indexPath) as? TableCell0
cell0?.nameLabel.text = baseVC?.profDict[indexPath.row].userName
return cell0!
}

//omission...
}
}

附加说明

import Foundation
import FirebaseFirestore

struct ProfDic {

var userName :String

var dictionary:[String:Any] {
return
["userName" : userName

]
}

}


extension ProfDic {

init?(dictionary:[String:Any]) {

guard let userName = dictionary["userName"] as? String
else {return nil}

self.init(userName: userName as String)

}

}

enter image description here

最佳答案

首先创建一个包含 ProfDic 元素的空数组:

var profDict: [ProfDic] = []

然后创建一个函数来加载您的 Firebase 数据:

func getFirebaseData() {

db = Firestore.firestore()
let userRef = db.collection("users").getDocuments() {
[weak self] (querySnapshot, error) in
for document in querySnapshot!.documents {
guard let docSnapshot = docSnapshot, docSnapshot.exists else {return}

if let prof = ProfDic(dictionary: docSnapshot.data()!) {
profDict.append(prof)
}
}
tableView.reloadData()
}
}

在 viewDidLoad 或 viewDidAppear 中调用此函数。

然后在 tableView cellForRowAt 中,您可以像这样访问数据:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch sections[indexPath.section].items[indexPath.row] {
case .prof:
let cell = tableView.dequeueReusableCell(withIdentifier: TableCellId, for: indexPath) as? TableCell
cell?.nameLabel.text = profDict[indexPath.row].userName
return cell!
}
}

编辑:同样在numberOfRowsInSection中:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return profDict.count
}

关于swift - 我想在 dequeueReusableCell 中获取 firestore 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870298/

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