2016-06-13 135 views
0

我有一个名为类:检查数组包含元素

class Person{ 

    let name: String? 
    let areas: [Area] 
} 

而且组成如下:

class Area{ 
    let id: String 
    let name: String 
} 

我创建了一个“人”阵列和我想要做的是检查“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!) 
    } 
    } 
} 

任何人都可以点我到正确的方向吗?

+1

不能突变,你是数组迭代。你可以建立一个新的数组,然后将其分配给你的属性/完成后从函数返回它。 – Paulw11

回答

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" } } 
+0

谢谢Eendje –