В настоящее время я работаю над мостом для HomeKit для React-Native, и мне нужно прочитать значения HomeKit, чтобы получить код Javascript.
Чтобы прочитать последнее значение признака, мы должны использовать readValueWithCompletionHandler , где значение не готово до его завершения. Поэтому я должен прочитать 6 из этих характеристик и назначить каждую из них моему NSMutableDictionary
объекту, который будет возвращен для обработки React-Native.
Вместо того, чтобы вкладывать каждое чтение внутри предыдущего completionHandler
с return accObject
внутри последнего, каков самый чистый подход к ожиданию завершения всех completionHandlers
до return
.
Я некоторое время искал, смотрел на semaphores
, DispatchGroup
и пару других решений без отличного представления о том, как решить эту проблему.
Для (грубого) примера:
NSMutableDictionary *accObject = [[NSMutableDictionary alloc] initWithCapacity: 6];
[charac1 readValueWithCompletionHandler:^(NSError *error) {
if (error) {
RCTLog(@"ERROR READING HOMEKIT VALUE: %@", error);
}
RCTLog(@"READ SETPOINT VALUE: %@", charac1.value);
accObject[@"charac1"] = charac1.value;
}];
...
[charac6 readValueWithCompletionHandler:^(NSError *error) {
if (error) {
RCTLog(@"ERROR READING HOMEKIT VALUE: %@", error);
}
RCTLog(@"READ SETPOINT VALUE: %@", charac6.value);
accObject[@"charac6"] = charac6.value;
}];
return accObject;