将数据与身份相关联

时间:2019-02-26 01:47:31

标签: serialization

假设我们有一千头奶牛要挤奶了。如果我们想要特定母牛的队列等待时间,那么测量队列入口和出口的到达时间是不够的:母牛不一定遵循FIFO协定。每次到达时间的测量结果必须与堆垛机特有的RFID测量结果配对。

通过选择特定的RFID数据(即特定的母牛),可以使用两个到达时间来计算等待时间。

问题

合并数据或在这种情况下将RFID附加到测量数据点的做法的名称是什么?

1 个答案:

答案 0 :(得分:0)

我正试图了解您的问题。也许您的示例的解决方案是:

您有一个自定义类

class Cow {
  var rfidTag: String?
  var queueEnteredAt: Date?
  var queueExitedAt: Date?
}  

其中rfidTag一经初始化就被初始化。

对于所有母牛,您可以使用数组或一组Cow实例:

  var cows: [Cow]  

必须正确初始化。

现在,当奶牛进入或退出队列时,将扫描RFID标签,并且必须访问相应的cow实例:

  let scannedCow = cows.filter { $0.rfidTag == scannedRFIDtag }.first  

并调用一个函数来设置此queueEnteredAt的相应属性queueExitedAtcow,例如:

  scannedCow?.queueEnteredAt = Date()  

最终,您可以对数组进行任何类型的统计。
PS:我不确定这是否有帮助,因为您问题的标签是序列化,并且在您对问题的编辑中,您询问过命名...

编辑:

如果RFID扫描器在单独的线程上传送scannedRFIDtag,则可能确实存在序列化问题,因为2个线程可能会尝试访问cows数组并在那里同时设置属性。在这种情况下,您需要对访问进行序列化,这可以通过将操作重定向到主队列来完成(如果仅要做很少的工作):

  DispatchQueue.main.async {
    // serialised operations
  }  

或通过设置串行访问队列:

private let serialAccessQueue = DispatchQueue(label: "com.xxx.yyy“)

并在那里工作:

  serialAlertQueue.sync {
    // serialised operations
  }