2017-03-07 6 views
-1

클래스의 인스턴스 배열을 필터링하려고합니다. 새 배열을 클래스 속성 중 하나로 필터링하고 싶습니다. 스위프트 필터가이 유스 케이스에서 작동하는 방식을 생각하면 머리를 터지게 할 수 없습니다.array.filter를 사용하여 속성을 기반으로 클래스 객체를 필터링하는 방법은 무엇입니까?

enum Gender { 
    case male,female 
} 

class Person { 
    let name:String 
    let gender:Gender 
    init(name:String,gender:Gender) { 
     self.name = name 
     self.gender = gender 
    } 
} 


let people = [Person.init(name: "James", gender: .male), 
       Person.init(name: "John", gender: .male), 
       Person.init(name: "Sally", gender: .female) 
      ] 

let males = people.filter(something) 

답변

2

이 작동합니다 ...

let males = people.filter({ $0.gender == .male })

당신이 비교를 할 equatable하기 위해 열거 comform해야 할 수 있습니다.

$ 0 익명의 매개 변수입니다, 당신은 또한 ...

let males = people.filter({ person in return person.gender == .male })

편집을 할 수있는 : 난 그냥이 테스트 한 그것은 열거가 equatable을 준수하지 않고 작업을 수행합니다. 열거 형 매개 변수를 사용하는 경우에만 그렇게해야한다고 생각합니다.

+0

챔피언 고마워. –