Почему мне нужно использовать readValue HMCharacteristic, чтобы получить текущее значение?
При написании примера кода, чтобы понять, как работает HomeKit, я обнаружил, что не получаю текущее значение, если просто использую свойство.value, например:
let theValue = serviceCharacteristic.value
Скорее, я бы запустил стандартное приложение Apple HomeKit, которое, кажется, синхронизирует все с базой данных, снова запустил мое приложение, и теперь я получу текущее значение.
Можно ли действительно получить текущее значение характеристики устройства только с помощью readValue?
func readValue(completionHandler completion: @escaping (Error?) -> Void)
Если нет, какой другой метод я должен использовать?
2 ответа
Да, база данных содержит относительно статическую информацию о характеристике, например, является ли она доступной для чтения или записи, но не содержит текущего фактического значения характеристики. Для этого вам нужно связаться с самим аксессуаром и выполнить readValue (и writeValue). Они выполняются системой и выполняются асинхронно с вашим потоком, поэтому вам нужен обработчик завершения, чтобы получить результаты, когда система завершит работу, и вернуться для доставки их в ваше приложение.
Да, вам нужно readValue, чтобы связаться с устройством и вернуть текущее значение. Когда вы пишетеValue, он должен вернуть, был ли запрос успешным. Так что вам не нужно читать его снова после изменения.