2016-07-20 12 views

答えて

3

ただ、これを行動で

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では、 '.first'は配列内の最初のオブジェクトの唯一のプロパティです。このような述語を受け入れるメソッドはありません。言及する価値がある、IMO。 – Moritz

1

あなたはこの試みることができる:あなたは複数の "ロリポップ" があると予想される場合は、

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

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はそれをさらに良くするでしょう;) –

関連する問題