2016-11-02 3 views
2

Gibt es eine Alternative der LINQ Select() - Methode in der Swift-Sprache?Wählen Sie() aus LINQ in Swift 3.0?

Als Beispiel in C# kann ich folgendes tun:

var ranks = cards.Select(a=> a.Rank).ToArray(); 

aber wie kann ich das Gleiche mit Swift Sprache tun?

+0

Die 'Rank' Eigenschaft' Card' sollte 'rank' genannt werden, im Einklang mit Schnelle Namenskonventionen C# verwendet Großbuchstaben für Eigenschaften und Kleinbuchstaben (oder "_" Präfix) für Instanzvariablen. Swift hat keine Instanzvariablen, daher besteht keine Notwendigkeit für die Unterscheidung. Die Eigenschaften areLowerCamelCase und camel case case sind für Typen und statische Eigenschaften reserviert. – Alexander

Antwort

5

map(_:)

let ranks = cards.map{ $0.Rank } 

der für syntaktischen Zucker ist:

let ranks = cards.map({ (card: Card) -> Rank in 
    return card.rank 
}) 

der aufgebrachte syntaktische Zucker umfasst:

  1. Trailing closure syntax

    let ranks = cards.map { (card: Card) -> Rank in 
        return card.rank 
    } 
    
  2. Inferenz Argumenttyp

    let ranks = cards.map { card -> Rank in 
        return card.rank 
    } 
    
  3. Inferenz Rückgabetyp

    let ranks = cards.map { card in 
        return card.rank 
    } 
    
  4. Implizite Rückgabewert

    let ranks = cards.map { card in 
        card.rank 
    } 
    
  5. Anonymous Argumente Schließung

    let ranks = cards.map { $0.rank } 
    

Schauen Sie sich den language guide section on closures (der Swift Name für das, was C# ruft lambda) für weitere Informationen,

+0

Sieht aus, als wäre es das! Danke vielmals. – Andrew

+0

@Andrew Ich gab einen Überblick darüber, wie die verschiedenen syntaktischen Zucker angewendet werden, um die endgültige Form zu erreichen, die ich zeigte. Es ist im Sprachführer behandelt. Sie sollten es unbedingt lesen, es ist sehr gut geschrieben, und es wird ein Kinderspiel sein, wenn Sie C# bereits kennen. – Alexander