Mark Bridges Mark Bridges - 2 years ago 85
Swift Question

In Swift how can I filter an array of objects conforming to a protocol by their class?

I have a protocol, 'VariousThings', and two classes which conform to it, 'ThingType1' and 'ThingType2'. I've put some objects of these two types of classes into an array containing 'VariousThings'. I now want to just take all the objects out of that array that are of class type 'ThingType2' for example. How can I do this?

Here's what I have so far:

protocol VariousThings: class {


class ThingType1: VariousThings {


class ThingType2: VariousThings {


let array: [VariousThings] = [ThingType1(), ThingType2()]

func itemsMatchingType(type: VariousThings.Type) -> [VariousThings] {
return array.filter { variousThing in
return (variousThing.self === type)

let justThingTypes1: [VariousThings] = itemsMatchingType(ThingType1)

Answer Source

You could use a generic

func itemsMatchingType<T : VariousThings>(type: T.Type) -> [VariousThings] {
  return array.filter { $0 is T }
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download