我有一个类似这样的类
class FoundItem : NSObject {
var id : String!
var itemName : String!
var itemId : Int!
var foundBy : String!
var timeFound : String!
init(id: String,
itemName: String,
itemId: Int,
foundBy: String,
timeFound: String)
{
self.id = id
self.itemName = itemName
self.itemId = itemId
self.foundBy = foundBy
self.timeFound = timeFound
}
我会将其引用在我的
class MapViewVC: UIViewController, MKMapViewDelegate {
var found = [FoundItem]()
var filterItemName : String()
}
我的FoundItem
通过从firebase查询中获得的一个字典数组生成。我从另一个视图控制器(集合视图)中获取一个itemName
字符串,然后筛选或搜索包含与前一个viewController
中的itemName
相等的itemName
字符串的数组。然后移除不等于itemName
的字典数组。我已经尝试了NSPredicates和for-in循环,但结果都只是创造了一个找到相等值或键的新数组或布尔类型。这是我目前编写的函数。
func filterArrayBySearch() {
if self.filterItemName != nil {
dump(found)
let namePredicate = NSPredicate(format: "itemName like %@", "\(filterItemName)")
let nameFilter = found.filter { namePredicate.evaluate(with: $0) }
var crossRefNames = [String: [FoundItem]]()
for nameItemArr in found {
let listName = nameItem.itemName
let key = listName
if crossRefNames.index(forKey: key!) != nil {
crossRefNames[key!]?.append(nameItemArr)
if !("\(key)" == "\(filterItemName!)") {
print("------------- Success have found [[[[[[ \(key!) ]]]]]] and \(filterItemName!) to be equal!!")
// crossRefNames[key!]?.append(nameItemArr)
} else {
print("!! Could not find if \(key!) and \(filterItemName!) are equal !!")
}
} else {
crossRefNames[key!] = [nameItemArr]
}
}
} else {
print("No Data from Search/FilterVC Controller")
}
}
有人可以帮忙吗?似乎找到值并过滤掉与 itemName
字符串不相等的字典应该是简单的任务,但我一直遇到困难。我自己也在运行 for-in 循环:P尝试不同的方法来完成相同的任务。