2016-03-31 3 views
0

Ich habe Helden Objekt wie folgen aus:Suche Objekt in Collection

import Foundation 
import UIKit 

class Hero { 

    var name: String! 
    var image: UIImage? { 
     return UIImage(named: "\(name)")! 
    } 

    required init(name: String) { 
     self.name = name 
    } 
} 

Ich will Helden auf der Suchleiste suchen, hier ist meine Suchfunktion:

func filterContentForSearchText(searchText:String) { 
     let searchBarTemp = searchBar 
     heroesFiltered = heroes.filter { (hero) -> Bool in 
      if hero.name.lowercaseString == searchBarTemp!.text?.lowercaseString { 
       return true 
      } 
      return false 
     } 
    } 

Aber wenn ich es suche nicht Wenn ich den Text in searchBar ändere, ist das Array leer.

Ich versuche auch mit NSPredicate suchen:

func filterContentForSearchText(searchText:String) { 
    heroesFiltered = [] 

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", self.searchBar!.text!) 
    let array = (heroes as NSArray).filteredArrayUsingPredicate(searchPredicate) 
    heroesFiltered = array as? [Hero] 
} 

Aber es stürzt auf dieser Linie:

let array = (heroes as NSArray).filteredArrayUsingPredicate(searchPredicate) 

Antwort

0

ich so versucht:

heroesFiltered = heroes.filter({ (hero) -> Bool in 
      let nameText: NSString = hero.name 

      return (nameText.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch).location) != NSNotFound 
     }) 

Und es funktionierte.