通过不同长度的数组循环Swift

时间:2016-04-03 20:32:50

标签: arrays swift sorting dictionary pfobject

我正在创建一个显示表视图中所有消息的代码。至&从。我遇到的问题是数组的长度是不同的,当比较它们时,循环停止在最短的时间而不是继续。

我正在做的是采用两个不同的阵列&将它们分成一个更大的数组,这个数组是一个组合,但是根据时间与另一个相比对它们进行排序。

我正在使用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)                            
  }

2 个答案:

答案 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中运行此功能并亲自查看。