---
title: HMCharacteristic
framework: homekit
role: symbol
role_heading: Class
path: homekit/hmcharacteristic
---

# HMCharacteristic

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

## Declaration

```swift
class HMCharacteristic
```

## Overview

Overview An 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 array of an HMService instance. Characteristics have a properties array that indicates attributes like readability, writability, and user-visibility. They also have a 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, or they can create custom types. Each characteristic has a 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 can help your app interpret the value.

## Topics

### Identifying a characteristic

- [uniqueIdentifier](homekit/hmcharacteristic/uniqueidentifier.md)
- [localizedDescription](homekit/hmcharacteristic/localizeddescription.md)

### Reading characteristic properties

- [properties](homekit/hmcharacteristic/properties.md)
- [Characteristic Properties](homekit/characteristic-properties.md)

### Determining what a characteristic controls

- [characteristicType](homekit/hmcharacteristic/characteristictype.md)
- [Characteristic types](homekit/characteristic-types.md)

### Controlling a characteristic

- [value](homekit/hmcharacteristic/value.md)
- [readValue(completionHandler:)](homekit/hmcharacteristic/readvalue(completionhandler:).md)
- [writeValue(_:completionHandler:)](homekit/hmcharacteristic/writevalue(_:completionhandler:).md)
- [updateAuthorizationData(_:completionHandler:)](homekit/hmcharacteristic/updateauthorizationdata(_:completionhandler:).md)

### Managing characteristic presentation

- [metadata](homekit/hmcharacteristic/metadata.md)
- [HMCharacteristicMetadata](homekit/hmcharacteristicmetadata.md)

### Receiving change notifications

- [enableNotification(_:completionHandler:)](homekit/hmcharacteristic/enablenotification(_:completionhandler:).md)
- [isNotificationEnabled](homekit/hmcharacteristic/isnotificationenabled.md)

### Getting the characterized service

- [service](homekit/hmcharacteristic/service.md)

### Initializers

- [init()](homekit/hmcharacteristic/init().md)

## Relationships

### Inherits From

- [NSObject](objectivec/nsobject-swift.class.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

## See Also

### Accessories

- [HMAccessorySetupManager](homekit/hmaccessorysetupmanager.md)
- [HMAccessorySetupResult](homekit/hmaccessorysetupresult.md)
- [HMAccessorySetupRequest](homekit/hmaccessorysetuprequest.md)
- [Interacting with a home automation network](homekit/interacting-with-a-home-automation-network.md)
- [HMAccessory](homekit/hmaccessory.md)
- [HMService](homekit/hmservice.md)
- [HMMediaSourceDisplayOrderProfile](homekit/hmmediasourcedisplayorderprofile.md)
