2016-07-20 11 views

Antwort

3

Nur soviel:

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

Wenn Sie dort erwarten mehr als eine "Lollipop" dann sein:

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

In Aktion:

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

Deine 'candies.first {$ 0.name ==" Lollipop "}' ist sehr cool. Aber ich fürchte, es ist nur für Swift 3: In Swift 2 ist '.first' nur eine Eigenschaft für das erste Objekt im Array, es gibt keine Methode, ein Prädikat wie dieses zu akzeptieren. Erwähnenswert, IMO. – Moritz

1

Sie konnten dieses versuchen:

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

Sorry, das war ein alter Swift. candies.first {$ 0.name == "Candyname"} sollte den Trick machen. –

+0

Das war Swift 1? Ich dachte, es wäre, aber ich habe es nicht erkannt, war mir nicht sicher. Diese Syntax war nicht ideal, eine gute Sache, dass sie es änderten. :) – Moritz

+0

Swift 3 würde es noch besser machen;) –

Verwandte Themen