2017-12-01 4 views
0
  1. Ich habe Array unsortedArray [AnyObject]. Ich habe drei struct-Modelle (Benachrichtigungsmodell, YouCard-Modell, Willkommensmodell) darin hinzugefügt. Alle diese drei Modelle enthalten den Parameter "time_stamp" im String-Format. Jetzt kann ich die Modelle nicht anhand von time_stamp sortieren.Wie sortieren Sie verschiedene Struct-Modelle in Array in swift?

  2. Ich bin nicht mit schnellen Funktionen vertraut. Ich habe eine Lösung versucht, aber seine Arbeit nicht

    enter image description here

+2

Sie können Elemente verschiedener Typen nicht mit '!' Vergleichen. Die Schließung kann mit den Gegenständen in umgekehrter Reihenfolge aufgerufen werden, die erste kann "NotificationCard" und die zweite "YouCard" sein. Warum erstellen Sie kein gemeinsames Protokoll für Karten und verwenden es anstelle von AnyObject? – Sulthan

+0

Was ist das Problem, das Sie haben? Sie müssen viel mehr Informationen zeigen. – creeperspeak

+0

Ich habe drei Strukturmodelle. Jedes Modell hat einen Timestamp-Parameter. Ich möchte diese Modelle anhand des Zeitstempels sortieren. – akshay

Antwort

1

Das ist ein klassischer Fall ist ein Protokoll zu verwenden, vermeiden Sie so viel wie möglich Arrays als [AnyObject] erklärt oder sogar [Any].

  • Erstellen Sie das Protokoll, alle Strukturen, die das Protokoll annehmen müssen timestamp

    protocol TimeStampable { 
        var timestamp : TimeInterval { get } 
    } 
    
  • die

    drei Klassen erstellen implementieren
    struct NotificationCard : TimeStampable { 
        var timestamp : TimeInterval = 34837465928 
    } 
    
    struct YouCard : TimeStampable { 
        var timestamp : TimeInterval = 67837465928 
    } 
    
    struct WelcomeCard : TimeStampable { 
        var timestamp : TimeInterval = 92837465928 
    } 
    
  • Anstatt unspecified [AnyObject] das Array als [TimeStampable] erklären

    let unsortedArray : [TimeStampable] = [YouCard(), WelcomeCard(), NotificationCard()] 
    
  • Jetzt können Sie das Array sortieren

    let res = unsortedArray.sorted{ $0.timestamp < $1.timestamp } 
    

Wenn Sie andere gemeinsame Elemente und Funktionen verwenden, um sie auf die Protokollerklärung hinzufügen und setzen sie in den Strukturen und/oder ein Protokoll verwenden, Erweiterung.

+0

ich werde diese Lösung versuchen. Danke und zurück zu Ihnen, wenn irgendein Problem auftritt – akshay

+0

funktioniert nicht @ vadian – akshay

+0

** Was ** funktioniert nicht? Mein Code Stand-Alone funktioniert. – vadian

Verwandte Themen