Я пытаюсь понять вашу проблему.Возможно, решение для вашего примера:
У вас есть пользовательский класс
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
или queueExitedAt
этого cow
, скажем:
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
}