【问题标题】:Associating data with an identity将数据与身份相关联
【发布时间】:2019-02-26 01:47:31
【问题描述】:

假设我们有一千头奶牛在排队挤奶。如果我们想要特定奶牛的队列等待时间,仅测量队列入口和出口的到达时间是不够的:奶牛不一定遵循 FIFO 契约。每次到达时间测量必须与 heffer 独有的 RFID 测量配对。

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

问题

组合数据的实践的名称是什么,或者在这种情况下将 RFID 附加到测量数据点,如上述示例中所示?

【问题讨论】:

  • 您提出了一个问题,但您的问题是什么?
  • 感谢您的提问。希望现在很清楚。如果没有,建议或问题表示赞赏

标签: serialization


【解决方案1】:

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

你有一个自定义类

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  

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

  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
  }  

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 2012-12-28
    • 2019-02-01
    • 2015-06-10
    • 2011-01-07
    • 2017-03-03
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多