2016-07-20 2 views
2

구조체로 생성 된 객체를 검색하고 싶습니다.구조체에 의해 생성 된 객체 검색

이것들은 Candy 구조체로 생성 된 객체라고 가정합시다.

두 개의 배열을 만들고 색인으로 개체를 찾지 않고 "Lollipop"요소의 범주를 어떻게 찾을 수 있습니까?

답변

3

를 그냥이 :

candies.first { $0.name == "Lollipop" } 

당신이 다음 하나 이상의 "롤리팝"이있을 것으로 예상되는 경우 :

행동
candies.filter { $0.name == "Lollipop" } 

:

13> struct Candy { 
14.  let cat: String 
15.  let name: String 
16. } 
17> var candies = [ 
18.  Candy (cat: "Hard", name: "Lollipop"), 
19.  Candy (cat: "Hard", name: "Jaw Breaker") 
20.  ] 
candies: [Candy] = 2 values { 
    [0] = { 
    cat = "Hard" 
    name = "Lollipop" 
    } 
    [1] = { 
    cat = "Hard" 
    name = "Jaw Breaker" 
    } 
} 

21> candies.first { $0.name == "Lollipop" } 
$R1: Candy? = (cat = "Hard", name = "Lollipop") 

22> candies.filter { $0.name == "Lollipop" } 
$R2: [Candy] = 1 value { 
    [0] = { 
    cat = "Hard" 
    name = "Lollipop" 
    } 
} 
+2

'candies.first {$ 0.name == "Lollipop"}'은 매우 멋집니다. 하지만 Swift 3에만 해당됩니다. Swift 2에서 .first는 배열의 첫 번째 객체에 대한 속성이며, 이와 같은 술어를 허용하는 메서드는 없습니다. 언급 할만한 가치가있는, IMO. – Moritz

1

이 작업을 시도 할 수 :

if let found = find(lazy(array).map({ $0.name }), "Foo") { 
    let obj = array[found] 
} 
+0

죄송합니다. 이것은 다소 오래되었습니다. candies.first {$ 0.name == "Candyname"}이 트릭을해야합니다. –

+0

이것은 스위프트 1 이었습니까? 나는 그것이라고 생각했다. 그러나 나는 그것을 인정하지 않았다, 확실하지 않았다. 이 구문은 이상적인 것이 아니며 변경된 좋은 점입니다. :) – Moritz

+0

스위프트 3을 사용하면 더 좋아질 것입니다.) –

관련 문제