【发布时间】:2017-03-27 00:37:39
【问题描述】:
我有这样的课程
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 查询生成的我的FoundItem 类中的字典数组。然后我得到一个itemName 的字符串,它是从另一个视图控制器生成的,它是didSelection 函数的集合视图。我想获取该字符串,然后使用字符串itemName 过滤或搜索数组,该字符串与我之前的viewController 中的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 尝试不同的事情来完成相同的任务。
【问题讨论】:
标签: ios arrays swift dictionary filter