【问题标题】:Looping Through Array of Different Lengths Swift遍历不同长度的数组 Swift
【发布时间】:2016-07-23 07:05:24
【问题描述】:

我正在编写一个在表格视图中显示所有消息的代码。往返。我遇到的问题是数组的长度不同,当比较它们时,循环会在最短的位置停止而不是继续。

我所做的是采用两个不同的数组并将它们排序为 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)                            
  }

【问题讨论】:

    标签: arrays swift sorting dictionary pfobject


    【解决方案1】:

    这一行:

    self.messagesPFObjectResults.append(<someObject>)
    

    有问题。当你在 for 循环中时,你不应该修改你正在迭代的数组。

    相反,您可以在 for 循环之前定义一个空数组,并将您的对象附加到 that 数组中。完成 for 循环后,您可以将临时数组中的对象添加到 self.messagesPFObjectResults

    【讨论】:

      【解决方案2】:

      如果您创建一个 Class Message 并将其子类化为 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 中运行此程序并亲自查看。

      【讨论】:

        猜你喜欢
        • 2016-02-23
        • 2015-02-21
        • 2016-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-20
        • 2021-04-23
        • 1970-01-01
        相关资源
        最近更新 更多