# UserInfo

    public final class UserInfo

The `UserInfo` class is provided by several CoreStore types such as `DataStack`, `ListMonitor`, `ObjectMonitor` and transactions to allow external libraries or user apps to store their own custom data.

    enum Static {
        static var myDataKey: Void?
    }
    CoreStoreDefaults.dataStack.userInfo[&Static.myDataKey] = myObject

Important

Do not use this class to store thread-sensitive data.

- `subscript(_:)`

  Allows external libraries to store custom data. App code should rarely have a need for this.

      enum Static {
         static var myDataKey: Void?
      }
      CoreStoreDefaults.dataStack.userInfo[&Static.myDataKey] = myObject

  Important

  Do not use this method to store thread-sensitive data.

  #### Declaration

  Swift

      public subscript(key: UnsafeRawPointer) -> Any? { get set }

  #### Parameters

  `key` | the key for custom data. Make sure this is a static pointer that will never be changed.

- `subscript(_:lazyInit:)`

  Allows external libraries to store custom data in the `DataStack`. App code should rarely have a need for this.

      enum Static {
          static var myDataKey: Void?
      }
      CoreStoreDefaults.dataStack.userInfo[&Static.myDataKey, lazyInit: { MyObject() }] = myObject

  Important

  Do not use this method to store thread-sensitive data.

  #### Declaration

  Swift

      public subscript(key: UnsafeRawPointer, lazyInit closure: () -> Any) -> Any { get }

  #### Parameters

  `key` | the key for custom data. Make sure this is a static pointer that will never be changed.
  `lazyInit` | a closure to use to lazily-initialize the data

  #### Return Value

  A custom data identified by `key`