我有一个名为 Person 的课程:
class Person{
let name: String?
let areas: [Area]
}
Area 包含以下内容:
class Area{
let id: String
let name: String
}
我创建了一个“people”数组,我想要做的是检查“people”数组,如果是area.name =“Brooklyn”。如果它没有从“人”阵列中删除该人。
这是我尝试过的但是不起作用:
var people = [Person]()
for s in people{
for a in s.preferredArea{
if a.areaName != "Brooklyn"{
let index = people.indexOf(s)
people.removeAtIndex(index!)
}
}
}
有人能指出我正确的方向吗?
答案 0 :(得分:2)
要使用indexOf
,您必须使Person
符合协议Equatable
:
class Person: Equatable {
let name: String
var area: [Area]
init(name: String) {
self.name = name
self.area = []
}
}
func ==(lhs: Person, rhs: Person) -> Bool {
return lhs.name == rhs.name &&
lhs.area == rhs.area // You'll have to make Area equatable too
}
完成此操作后,您的代码就可以正常工作了。如果您不想使用此方法,可以使用:
people.enumerate().forEach {
if !$0.1.area.contains({ $0.name == "Brooklyn" }) {
people.removeAtIndex($0.0)
}
}
或者,如果您可以使用过滤器来创建新阵列:
var newPeople = people.filter { $0.area.contains { $0.name == "Brooklyn" } }