Связывание данных с личностью - PullRequest
0 голосов
/ 26 февраля 2019

Предположим, что у нас тысяча коров в очереди на доение.Если бы мы хотели время ожидания очереди конкретной коровы, то измерения времени прибытия на вход и выход из очереди было бы недостаточно: коровы не обязательно следуют соглашению FIFO.Каждое измерение времени прибытия должно быть сопряжено с измерением RFID, уникальным для хеффера.

Выбрав конкретную привязку RFID (т. Е. Конкретную корову), можно использовать два времени прибытия для расчета времени ожидания.

ВОПРОС

Как называется практика объединения данных или в этом случае добавление RFID к точке данных измерения, как в указанном примере?

1 Ответ

0 голосов
/ 10 марта 2019

Я пытаюсь понять вашу проблему.Возможно, решение для вашего примера:

У вас есть пользовательский класс

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
  }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...