如何将[NSManagedObject]转换为nsmutable数组(Swift)

时间:2016-02-24 07:56:15

标签: ios swift core-data ios9 nsmanagedobject

我在我的应用中使用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所以如何转换呢?

1 个答案:

答案 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

更方便的方法是使用filtermap函数。

self.searchcity = people.filter({$0.city.lowercaseString.rangeOfString(self.searchtext.lowercaseString) != nil}).map{ $0.city }