mkwilfreid
mkwilfreid

Reputation: 128

Swift Array of objects filtering

I've the following array of objects which I'm trying to filter and return for a searchDosplayController.

var family = [Family]()// fetchedFamily
var filteredFamily: [Family]! // filter fetched events

And that is how, I'm filtering it:

func updateSearchResultsForSearchController(searchController: UISearchController) {
        let searchText = searchController.searchBar.text

        self.filteredProvince = provinces
                if !searchText.isEmpty {
                    let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@", searchText)
                    let array = (filteredProvince as NSArray).filteredArrayUsingPredicate(searchPredicate)
                    filteredProvince = array as! [Province]
}

However nothing is getting returned when I'm searching. And I tried to do it in this way:

filteredFamily = searchText.isEmpty ? family : family.filter({(dataString: String) -> Bool in
           return dataString.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil
        })

But, I'm receiving the following error: 'Family is not a subtype of String'. Is there any better way to filter the Family? Because, the filtered result has to be sent back to searchDisplayController.

Thanks in advance.

Upvotes: 1

Views: 2843

Answers (1)

Luca Angeletti
Luca Angeletti

Reputation: 59496

So we have a Family class that does look like this right?

class Family {
    let name : String
    init(name:String) {
        self.name = name
    }
}

Then we have a list of families:

var families = [Family]()

And we want to extract all the families where the name property contains a given text.

let searchText = "something here"

Good, first of all we add this extension to the String struct.

extension String {
    func contains(find: String) -> Bool {
        return self.rangeOfString(find) != nil
    }
}

And finally we can filter the families writing:

let filtered = families.filter { $0.name.contains(searchText) }

Hope this helps.

Upvotes: 1

Related Questions