Filter Array of [AnyObject] in Swift Filter Array of [AnyObject] in Swift swift swift

Filter Array of [AnyObject] in Swift


Your array, objects, is an array of PFObject objects. Thus, to filter the array, you might do something like:

let filteredArray = objects.filter() {    if let type = ($0 as PFObject)["Type"] as String {        return type.rangeOfString("Sushi") != nil    } else {        return false    }}

My original answer, based upon an assumption that we were dealing with custom Restaurant objects, is below:


You can use the filter method.

Let's assume Restaurant was defined as follows:

class Restaurant {    var city: String    var name: String    var country: String    var type: [String]!    init (city: String, name: String, country: String, type: [String]!) {        ...    }}

So, assuming that type is an array of strings, you'd do something like:

let filteredArray = objects.filter() {contains(($0 as Restaurant).type, "Sushi")}

If your array of types could be nil, you'd do a conditional unwrapping of it:

let filteredArray = objects.filter() {    if let type = ($0 as Restaurant).type as [String]! {        return contains(type, "Sushi")    } else {        return false    }}

The particulars will vary a little depending upon your declaration of Restaurant, which you haven't shared with us, but hopefully this illustrates the idea.


Swift 3 Solution

Use the filter method on an array.

let restaurants: [Restaurants] = [...]restaurants.filter({(restaurant) in    return Bool(restaurant.type == "sushi")})

or return Bool(restaurant.type.contains("sushi")) if type is an array.


Ok, if the array objects contains only Restaurant(s) the following code does work.

Lets say Restaurant is something like this:

enum RestaurantType {    case Sushi, Japanese, Asian}class Restaurant {    var type = [RestaurantType]()    // more properties here...}

First of all lets define an array of Restaurant(s).

var restaurants = objects as [Restaurant]

Then we can filter it:

var sushiRestaurants = restaurants.filter { (restaurant : Restaurant) -> Bool in    return contains(restaurant.type, .Sushi)}

Update:Now I am assuming objects is an array of PFObject(s)Just ignore my previous code and try this:

var restaurants = objects as [PFObject]var sushiRestaurants = restaurants.filter { (restaurant : PFObject) -> Bool in    return contains(restaurant["Type"], "Sushi")}

Maybe it will crash again, the problem is that I don't know the type of Restaurant.Type. I'm trying. Maybe the next error message will provide more useful info.