我正在创建一个显示表视图中所有消息的代码。至&从。我遇到的问题是数组的长度是不同的,当比较它们时,循环停止在最短的时间而不是继续。
我正在做的是采用两个不同的阵列&将它们分成一个更大的数组,这个数组是一个组合,但是根据时间与另一个相比对它们进行排序。
我正在使用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 :(得分:0)
这一行:
self.messagesPFObjectResults.append(<someObject>)
有问题。当你在for循环中时,你不应该修改你正在迭代的数组。
相反,您可以在for循环之前定义一个空数组,然后将对象追加到那个数组。完成for循环后,可以将临时数组中的对象添加到self.messagesPFObjectResults
。
答案 1 :(得分: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
}
}
在Playground中运行此功能并亲自查看。