我在我的应用中使用coredata。我将50个城市存储在我的核心数据中。现在我想使用搜索栏。这与阵列运行良好。我正在使用过滤。这是我的代码
arrcity.enumerateObjectsUsingBlock({ (obj, _, _) -> Void in
if let city : SelectCityModel = obj as? SelectCityModel
{
if city.city.lowercaseString.rangeOfString(self.searchtext.lowercaseString) != nil
{
self.searchcity?.addObject(city)
}
}
})
现在我想做同样的过程,但我有[nsmanagedobject]人。那我怎么能这样做呢。如果有任何方法可以将[NsmanagedObject]转换为nsmutablearry,那将会很轻松。
这是我的代码
if (people.count > 0)
{
people.enumerateObjectsUsingBlock({ (obj, _, _) -> Void in
if let city : SelectCityModel = obj as? SelectCityModel
{
if city.city.lowercaseString.rangeOfString(self.searchtext.lowercaseString) != nil
{
self.searchcity?.addObject(city)
}
}
})
}
但是这里var people = NSManagedObject所以如何转换呢?
答案 0 :(得分:1)
NSMutableArray
与Swift数组无关。
但您可以将Swift数组与本机枚举器一起使用,例如
people.forEach { [unowned self] (object) -> () in
if object is SelectCityModel
{
if object.city.lowercaseString.rangeOfString(self.searchtext.lowercaseString) != nil
{
self.searchcity?.addObject(city)
}
}
}
如果人们始终[SelectCityModel]
将其转换为fetch行中的该类型,并省略forEach
闭包中的类型检查。检查是否还需要people > 0
。
更方便的方法是使用filter
和map
函数。
self.searchcity = people.filter({$0.city.lowercaseString.rangeOfString(self.searchtext.lowercaseString) != nil}).map{ $0.city }