4

I'm trying to filter an array of custom objects in swift to get back a subset of data that has properties I want to isolate. My code is as follows.

func generateSubset( dataPool : [CustomObject]) -> [CustomObject]? {

            let subsetData = dataPool.filter{(includeElement:CustomObject)-> Bool in
                return contains(includeElement.position, "TEACHER")
            }

        return subsetData
    }

My custom object is as follows:

   class CustomObject :  {
        var position : String?

        init(){
          position = ""
        }
    }

However the error Xcode throws me when trying to compile this code is:

Cannot invoke 'filter' with an argument list of type [CustomObject] -> Bool

I'm using Swift 1.2 and can't seem to figure out what I'm doing wrong. Any help would be appreciated.

rmaddy
  • 314,917
  • 42
  • 532
  • 579
zic10
  • 2,310
  • 5
  • 30
  • 55

1 Answers1

5

In Swift 1.2, filter is a global function, so you can't say dataPool.filter(...). (In Swift 2, this will work.)

Furthermore, contains can't be used with Strings like that. I would recommend using the rangeOfString: method from NSString:

let teachers = filter(dataPool) { // in Swift 2 this would be "dataPool.filter {"
    return $0.position!.rangeOfString("TEACHER") != nil
}
jtbandes
  • 115,675
  • 35
  • 233
  • 266