2016-04-03 10 views
1

ich einen Code mache, der die Nachrichten alle Anzeigen in einer Tabelle anzeigt. Um & Von. Das Problem, auf das ich stoße, ist, dass die Arrays unterschiedliche Längen haben, und wenn man sie vergleicht, stoppt die Schleife bei der kürzesten, anstatt weiterzugehen.Looping Durch Array unterschiedlicher Länge Swift

Was tun, ist die beiden verschiedenen Arrays & Sortiere sie in 1 größere Array das ist eine Kombination, aber sortieren Sie sie auf der Grundlage der Zeit im Vergleich zu den anderen.

Ich verwende Swift & Ich verwende auch Parse die Informationen abzufragen.

Ich gebe zu, ich bin nicht der beste mit Arrays. Wäre dies ein guter Zeitpunkt für ein Wörterbuch der gesendeten Nachrichten & Recieved Nachrichten und dann Schleife durch?

for var i = 0; i <= self.messagesPFObjectResults.count; i++ { 

    let sentMessagesInfo = sentMessagesObject![i] //This Equals 7 
    let recievedMessageInfo = recievedMessagesObject![i] // this equals 8 

     if sentMessagesInfo.createdAt?.timeIntervalSinceReferenceDate >= recievedMessageInfo.createdAt?.timeIntervalSinceReferenceDate { 

      self.messagesPFObjectResults.append(recievedMessageInfo) 
      print("message recieved at: \(recievedMessageInfo.createdAt!)") 


      print(false) 

      } else if sentMessagesInfo.createdAt?.timeIntervalSinceReferenceDate <= recievedMessageInfo.createdAt?.timeIntervalSinceReferenceDate { 

      self.messagesPFObjectResults.append(sentMessagesInfo) 

      print("message sent at: \(sentMessagesInfo.createdAt!)") 

      print(true) 

      } 

      print(i)        
    } 

Antwort

0

Diese Zeile:

self.messagesPFObjectResults.append(<someObject>) 

ist problematisch. Wenn Sie sich in der for-Schleife befinden, sollten Sie das Array, über das Sie iterieren, nicht ändern.

Sie können stattdessen ein leeres Array vor Ihrer for-Schleife definieren und Ihre Objekte stattdessen an dieses-Arrays anhängen. Nachdem Sie die for-Schleife abgeschlossen haben, können Sie die Objekte aus Ihrem temporären Array in self.messagesPFObjectResults hinzuzufügen.

0

Wenn Sie eine Klasse Nachrichten- und Unterklasse es in ReceivedMessage und SentMessage schaffen, als es wirklich einfach ist, sie zu sortieren und eine Gesamt Array zu erstellen.

Sehen Sie dieses Beispiel (mit ganzen Zahlen statt Daten aus, wenn Einfachheit):

class Message { 
    let date : Int 

    init(date : Int) { 
     self.date = date 
    } 

} 

class ReceivedMessage : Message { 

} 

class SentMessage : Message { 

} 

// Create the arrays containing the Messages 
var receivedMessages : [ReceivedMessage] = [] 
var sentMessages : [SentMessage] = [] 

// Just creating random objects 
for i in 1...5 { 
    receivedMessages.append(ReceivedMessage(date: i)) 
} 

// Just creating random objects 
for j in 1...3 { 
    sentMessages.append(SentMessage(date: j)) 
} 

// Create the array to hold all the Received and Sent messages i 
var messages : [Message] = [] 
for receivedMessage in receivedMessages { 
    messages.append(receivedMessage as Message) 
} 

for sentMessage in sentMessages { 
    messages.append(sentMessage as Message) 
} 

// Create the array with all the sorted messages 
let ordenedMessages = messages.sort { 
    return $0.date < $1.date 
} 

print("Messages:") 
for message in messages { 
    switch(message) { 
    case is ReceivedMessage : print("ReceivedMessage: \(message.date)") 
    case is SentMessage : print("SentMessage: \(message.date)") 
    default: break 
    } 
} 

print("\nOrdened Messages:") 

for message in ordenedMessages { 
    switch(message) { 
    case is ReceivedMessage : print("ReceivedMessage: \(message.date)") 
    case is SentMessage : print("SentMessage: \(message.date)") 
    default: break 
    } 
} 

Run diese in einem Spielplatz und es selbst sehen.