使用Swift查找用户是不是已经显示在TableView中[重复]
Posted
技术标签:
【中文标题】使用Swift查找用户是不是已经显示在TableView中[重复]【英文标题】:Find if user is already displayed in TableView using Swift [duplicate]使用Swift查找用户是否已经显示在TableView中[重复] 【发布时间】:2017-12-12 13:28:00 【问题描述】:我正在编写一个允许搜索特定用户的 viewController。我有一个 searchBar 和一个监听器:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
doSearch()
func doSearch()
if let searchText = searchBar.text?.lowercased()
self.users.removeAll()
self.tableView.reloadData()
Api.User.queryUsers(withText: searchText, completion: (user) in
self.users.append(user)
self.tableView.reloadData()
)
queryUser 函数:
func queryUsers(withText text: String, completion: @escaping (Userm) -> Void)
REF_USERS.queryOrdered(byChild: "username_lowercase").queryStarting(atValue: text).queryEnding(atValue: text+"\uf8ff").queryLimited(toLast: 5).observeSingleEvent(of: .value) (snapshot) in
snapshot.children.forEach( (s) in
let child = s as! DataSnapshot
if let dict = child.value as? [String: Any]
let user = Userm.transformUser(dict: dict, key: child.key)
completion(user)
)
问题在于,使用 Firebase,当我写得太快时,我可能会多次显示同一个用户。我想要一个可以执行以下操作的函数:
// if user is not already contained in the array
-> Display it
我尝试使用 .contains() 函数,但效果不佳,我还是 Swift 的初学者。
请问你有什么想法吗?
【问题讨论】:
我找到了一个主题来回答我的问题:***.com/questions/24330056/… 我尝试了你的答案,但效果不佳。非常感谢。 【参考方案1】:您可以选择过滤 TableView 用来显示数据的数组。这可以通过将其转换为 Set
(因为 Set 仅包含唯一值)然后再次返回到 Array
来完成,或者通过对 User 类进行扩展以使其符合 Equatable
协议。可以像这样使用 set 选项:
let array = ["one", "one", "two", "two", "three", "three"]
let unique = Array(Set(array))
// ["one", "two", "three"]
使用协议看起来像这样:
extension User: Equatable
static func == (lhs: User, rhs: User) -> Bool
//make sure the User class has something that can uniquely identify them.
return lhs.identifier == rhs.identifier
【讨论】:
【参考方案2】:我认为您可以使用filters
来获取有效数组。
类似这样的:
var someObject:SomeObject = receivedObjectFromMars
var arrayOfObjects:Array<SomeObject> = [object1, object2, object3, object4]
// imagine that 'someObject' has the same email of object1 and object 4.
var filteredArray:Array<String> = [];
filteredArray = arrayOfObjects.filter( (obj) -> Bool in
//so when you filter the array, you will compare a specific
// attribute (e.g: email)
return obj.email != someObject.email
)
// current filteredArray = [object2, object3]
所以,在那之后,如果你想添加特定元素,你只需添加。
filteredArray.append(someObject);
您可以将它与其他类型一起使用,例如字符串、int 等。
也可以在这里获得帮助:Swift 3 filter array of objects with elements of array
JLU。
【讨论】:
以上是关于使用Swift查找用户是不是已经显示在TableView中[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 使用计时器检测用户不活动,然后在 4 分钟后显示警报以提示用户是不是仍然存在
无法在 View Controller iOS Swift 中显示 TabBar