2016-04-03 91 views
1

我正在做一個代碼,顯示錶視圖中的所有消息。到&從。我遇到的問題是數組的長度不同,當比較它們時,循環會以最短的時間停止,而不是繼續。循環通過不同長度的數組Swift

我正在做的是採取兩個不同的陣列&將它們分成1個更大的陣列,這是一個組合,但根據時間相比,他們排序他們。

我正在使用Swift &我也在使用Parse查詢信息。

我承認我不是陣列最好的。這將是一個發送消息字典的好時機&收到消息,然後循環?

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)        
    } 

回答

0

這條線:

self.messagesPFObjectResults.append(<someObject>) 

是有問題的。當你在for循環中時,你不應該修改你正在迭代的數組。

相反,您可以在for循環之前定義一個空數組,然後將您的對象追加到,即數組。完成for循環後,可以將臨時數組中的對象添加到self.messagesPFObjectResults中。

0

如果您創建一個類消息並將其子類化爲ReceivedMessage和SentMessage,那麼真正容易對它們進行排序並創建一個總數組。

見這個例子(用整數而不是日期了,如果簡單):

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 
    } 
} 

運行這在操場,看到它自己。