Почему мне нужно использовать readValue HMCharacteristic, чтобы получить текущее значение?

При написании примера кода, чтобы понять, как работает HomeKit, я обнаружил, что не получаю текущее значение, если просто использую свойство.value, например:

let theValue = serviceCharacteristic.value

Скорее, я бы запустил стандартное приложение Apple HomeKit, которое, кажется, синхронизирует все с базой данных, снова запустил мое приложение, и теперь я получу текущее значение.

Можно ли действительно получить текущее значение характеристики устройства только с помощью readValue?

func readValue(completionHandler completion: @escaping (Error?) -> Void)

Если нет, какой другой метод я должен использовать?

2 ответа

Да, база данных содержит относительно статическую информацию о характеристике, например, является ли она доступной для чтения или записи, но не содержит текущего фактического значения характеристики. Для этого вам нужно связаться с самим аксессуаром и выполнить readValue (и writeValue). Они выполняются системой и выполняются асинхронно с вашим потоком, поэтому вам нужен обработчик завершения, чтобы получить результаты, когда система завершит работу, и вернуться для доставки их в ваше приложение.

Да, вам нужно readValue, чтобы связаться с устройством и вернуть текущее значение. Когда вы пишетеValue, он должен вернуть, был ли запрос успешным. Так что вам не нужно читать его снова после изменения.

Другие вопросы по тегам