我正在尝试了解您的问题。也许您的示例的解决方案是:
你有一个自定义类
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 的相应属性queueEnteredAt 或queueExitedAt,例如:
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
}