<!--
{
  "availability" : [
    "iOS: 8.0.0 -",
    "iPadOS: 8.0.0 -",
    "macCatalyst: 8.0.0 -",
    "tvOS: 10.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "HomeKit",
  "identifier" : "/documentation/HomeKit/HMCharacteristic",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "HomeKit"
    ],
    "preciseIdentifier" : "c:objc(cs)HMCharacteristic"
  },
  "title" : "HMCharacteristic"
}
-->

# HMCharacteristic

A specific characteristic of a service, like the brightness of a dimmable light or its color temperature.

```
class HMCharacteristic
```

## Overview

An [`HMCharacteristic`](/documentation/HomeKit/HMCharacteristic) instance represents an aspect of a service that provides data, or that your app can control.

You don’t create characteristic instances. Instead, an accessory manufacturer incorporates them into a device, which publishes them to you through the [`characteristics`](/documentation/HomeKit/HMService/characteristics) array of an [`HMService`](/documentation/HomeKit/HMService) instance.

Characteristics have a [`properties`](/documentation/HomeKit/HMCharacteristic/properties) array that indicates attributes like readability, writability, and user-visibility. They also have a [`characteristicType`](/documentation/HomeKit/HMCharacteristic/characteristicType) property that tells your app what the characteristic controls or describes. Device manufacturers can use one of the standard types, given in [Characteristic types](/documentation/HomeKit/characteristic-types), or they can create custom types.

Each characteristic has a [`value`](/documentation/HomeKit/HMCharacteristic/value) that you can read or write. Some characteristics use plain numbers, Booleans, or strings. Others have application specific meanings declared in enumerations associated with the given characteristic type. The characteristic’s [`metadata`](/documentation/HomeKit/HMCharacteristic/metadata) can help your app interpret the value.

## Topics

### Identifying a characteristic

[`uniqueIdentifier`](/documentation/HomeKit/HMCharacteristic/uniqueIdentifier)

A unique identifier for the characteristic.

[`localizedDescription`](/documentation/HomeKit/HMCharacteristic/localizedDescription)

The localized description of the characteristic.

### Reading characteristic properties

[`properties`](/documentation/HomeKit/HMCharacteristic/properties)

An array of properties that describe the characteristic.

[Characteristic Properties](/documentation/HomeKit/characteristic-properties)

The properties that characteristics can have.

### Determining what a characteristic controls

[`characteristicType`](/documentation/HomeKit/HMCharacteristic/characteristicType)

The type of the characteristic.

[Characteristic types](/documentation/HomeKit/characteristic-types)

The characteristic types supported by HomeKit-based accessories.

### Controlling a characteristic

[`value`](/documentation/HomeKit/HMCharacteristic/value)

The current value of the characteristic.

[`-  readValueWithCompletionHandler:`](/documentation/HomeKit/HMCharacteristic/readValue(completionHandler:))

Reads the value for the characteristic.

[`-  writeValue:completionHandler:`](/documentation/HomeKit/HMCharacteristic/writeValue(_:completionHandler:))

Modifies the value of the characteristic.

[`-  updateAuthorizationData:completionHandler:`](/documentation/HomeKit/HMCharacteristic/updateAuthorizationData(_:completionHandler:))

Sets or clears authorization data used when writing to the characteristic.

### Managing characteristic presentation

[`metadata`](/documentation/HomeKit/HMCharacteristic/metadata)

Metadata about the units and other properties of the characteristic.

[`HMCharacteristicMetadata`](/documentation/HomeKit/HMCharacteristicMetadata)

Metadata that describes a characteristic’s value and that may be useful for presentation purposes.

### Receiving change notifications

[`-  enableNotification:completionHandler:`](/documentation/HomeKit/HMCharacteristic/enableNotification(_:completionHandler:))

Enables or disables notifications for changes in the value of the characteristic.

[`notificationEnabled`](/documentation/HomeKit/HMCharacteristic/isNotificationEnabled)

A Boolean indicating whether the characteristic has been set to send notifications.

### Getting the characterized service

[`service`](/documentation/HomeKit/HMCharacteristic/service)

The service that contains this characteristic.

## Relationships

### Conforms To

[`Sendable`](/documentation/Swift/Sendable)

[`Equatable`](/documentation/Swift/Equatable)

[`CVarArg`](/documentation/Swift/CVarArg)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

[`Hashable`](/documentation/Swift/Hashable)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)