Key Value API предоставляет новые API для управления специальными данными объектов Device, Room и Automation. Жизненный цикл пользовательских данных строго ограничен жизненным циклом объекта, с которым они связаны. Например, специальные данные (такие как "Комната Люси"), связанные с объектом "Комната", будут автоматически удалены, перемещены или перенесены (между структурами) вместе с объектом "Комната".
Изменения в Swift API касаются контроллера CustomAppData и предоставляют расширения для объектов, к которым относятся данные пользовательского приложения. Они включают стандартные функции создания, чтения, обновления и удаления (CRUD).
Пример для устройства
guard let device = home.devices.first(where: { $0.name == deviceName }) else { return }
var response = try await device.customAppData[key]
print("Before: \(response)")
try await device.customAppData.update(key: key, value: value)
response = try await device.customAppData[key]
print("After: \(response)")
try await device.customAppData.delete(key)
Пример чат-группы
guard let room = home.rooms.first(where: { $0.name == roomName }) else { return }
try await room.customAppData.update(key: "nickname", value: "Lucy's Room")
let response = try await room.customAppData["nickname"]
try await room.customAppData.delete("nickname")
Пример автоматизации
guard let automation = home.automations.first(where: { $0.name == automationName }) else { return }
var response = try await automation.customAppData[key]
print("Before: \(response)")
try await automation.customAppData.update(key: key, value: value)
response = try await automation.customAppData[key]
print("After: \(response)")
try await automation.customAppData.delete(key)
Ограничения
- Ключ должен представлять собой строку допустимых символов UTF-8 длиной не более 128 символов. Ключ может быть пустой строкой.
- Значение должно быть строкой допустимых символов UTF-8 длиной не более 1024 символов. Значение может быть пустой строкой.
- Каждый объект может содержать 10 строк пар "ключ-значение".