I am struggling with filtering an array of objects which have a nested arrays of different objects.
Eg. I have an array of objects:
class Form {
let name: String
let lasname: String
let roles: [Rule]
// ... init etc.
}
class Rule {
let rule: String
// ... init etc.
}
Initialized array would looks like:
var forms = [Form]()
let firstRoles: [Rule] = [Rule(rule: "First"), Rule(rule: "Second")]
let secondRoles: [Rule] = [Rule(rule: "Third"), Rule(rule: "Second")]
forms.append(Form(name: "Test1", lastname: "Test2", roles: firstRoles))
forms.append(Form(name: "Test3", lastname: "Test4", roles: secondRoles))
And now I need to filter forms via Keys.
Keys:
let keyRoles: [Rule] = [Rule(rule: "First"), Rule(rule: "Second")]
After filtering 2 element array forms I should recived only first becouse both of the rules match the pattern.
The code for filtering:
forms.filter { (form) in Bool in
return form.roles.contains(where: { (rule) -> Bool in
keyRoles.contains(rule)
})
}
Will return nothing, an empty array. Any ideas what Am I doing wrong ?
Thanks in advance!