2016-04-03 4 views
1

すべてのメッセージをテーブルビューで表示するコードを作成しています。 To &から。私が取り組んでいる問題は、配列の長さが異なることです。それらを比較すると、ループは最短で停止するのではなく、続行されます。異なる長さの配列をループするSwift

2つの異なるアレイを取っているのは何ですか?&それらを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 
    } 
} 

と自分自身でそれを参照してください。

は、(整数の代わりの日付アウトシンプル場合に)この例を参照してください。

関連する問題