Swift 4 Firebase:在TableView中显示指定角色用户的方法
如何在TableView中只显示特定角色(user/guest)的用户?
问题描述:
我想在TableView里只显示角色为“user”或“guest”的用户,我的User模型代码如下:
import Foundation import Firebase class User: NSObject { var id: String? var name: String? var login: String? var email: String? var profileImageUrl: String? var role: String? var isOnline: String? init(dictionary: [String: AnyObject]) { self.isOnline = dictionary["isOnline"] as? String self.id = dictionary["userID"] as? String self.name = dictionary["name"] as? String // 剩余初始化代码省略... } }
解决方案
嘿,我来帮你一步步实现这个需求,核心思路就是先过滤数据源,再用过滤后的数组给TableView提供数据:
1. 筛选符合条件的用户
假设你已经从Firebase获取到了所有用户的数组allUsers: [User],我们可以用Swift的filter方法快速筛选出角色是user或guest的用户:
// 过滤逻辑:只保留角色为"user"或"guest"的用户 let filteredUsers = allUsers.filter { user in // 先判断角色是否存在,避免nil导致的崩溃 guard let userRole = user.role else { return false } return userRole == "user" || userRole == "guest" }
2. 维护TableView的数据源数组
在你的ViewController或者ViewModel里,专门维护一个用于显示的数组(比如displayUsers),把过滤后的结果赋值给它,然后刷新TableView:
// 定义用于TableView显示的数据源数组 var displayUsers: [User] = [] // 加载并过滤用户的方法 func loadFilteredUsers() { // 这里替换成你从Firebase获取所有用户的实际逻辑 fetchAllUsersFromFirebase { [weak self] allUsers in guard let self = self else { return } // 执行过滤 self.displayUsers = allUsers.filter { user in guard let role = user.role else { return false } return role == "user" || role == "guest" } // 刷新TableView,显示过滤后的用户 self.tableView.reloadData() } }
3. 实现TableView的数据源方法
接下来正常实现TableView的数据源方法,用displayUsers数组来提供数据:
// 返回行数:过滤后的用户数量 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return displayUsers.count } // 配置Cell内容 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath) as! UserCell let currentUser = displayUsers[indexPath.row] // 给Cell设置用户信息,比如名字、头像等 cell.nameLabel.text = currentUser.name cell.emailLabel.text = currentUser.email // 其他UI配置... return cell }
额外提示:实时数据更新
如果你的用户数据是从Firebase实时数据库监听的(比如用observe(.value)),那每次数据变化时,重新执行一遍过滤逻辑并刷新TableView就可以了,这样能保证TableView实时显示符合条件的用户~
内容的提问来源于stack exchange,提问作者George Heints
相关产品推荐
相关产品推荐

