trying to filter an array of custom object type ParseEmployee which inherits from NSObject.
Any ideas what could be causing this error?
trying to filter an array of custom object type ParseEmployee which inherits from NSObject.
Any ideas what could be causing this error?
Consider the following example:
struct MyEmployee {
var employeeId : Int
var employeeName : String
var employeeAge : Int
var employeeGender : String
init(_ id: Int, _ name: String, _ age: Int, _ gender: String) {
employeeId = id
employeeName = name
employeeAge = age
employeeGender = gender
}
}
var arrayOfEmployees : [MyEmployee] = [MyEmployee(1, "John", 28, "Male"), MyEmployee(2, "Sarah", 35, "Female"), MyEmployee(3, "Christine", 24, "Female")]
var filtered = arrayOfEmployees.filter {employee in employee.employeeAge < 30 }
print(filtered) // Employee objects John and Christine
The closure following .filter suffix to your array must be of return type Bool ("element-type-of-array" -> Bool). You either explicitly add a return or simply make sure the statement following employee in is one that evaluates to type Bool (e.g., employee.employeeAge < 30, which returns true or false).
Note that you can treat the closure as any anonymous closure type, not necessarily using a single-line statement. E.g.:
var anotherFiltered = arrayOfEmployees.filter{
employee in
return employee.employeeAge < 30 && employee.employeeGender == "Female" }
print(anotherFiltered) // Employee object Christine
You should be able to run as the following:
filtered = arrayOfEmployees.filter { // filter them here }
$0 will be the member of the array and you just have to make sure the braces return a true or false Bool, you do not need to do (employee) -> Bool in here.
If you wanted employee just do the following:
filtered = arrayOfEmployees.filter { employee in // filter here }
Your filter closure has to return a Bool.
So something like.
filtered = arrayOfEmployees.filter { return true }
Now that's not useful because nothing is filtered but it fixes your error. Let's say your ParseEmployee has a property isManager:Bool. Then you could do something like.
filtered = arrayOfEmployees.filter { $0.isManager }