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.