<!--
{
  "availability" : [
    "iOS: 7.0.0 -",
    "iPadOS: 7.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.0.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Foundation",
  "identifier" : "/documentation/Foundation/NSAttributedString/init(data:options:documentAttributes:)",
  "metadataVersion" : "0.1.0",
  "role" : "Initializer",
  "symbol" : {
    "kind" : "Initializer",
    "modules" : [
      "Foundation"
    ],
    "preciseIdentifier" : "c:objc(cs)NSAttributedString(im)initWithData:options:documentAttributes:error:"
  },
  "title" : "init(data:options:documentAttributes:)"
}
-->

# init(data:options:documentAttributes:)

Creates an attributed string from the contents of the specified data object.

```
init(data: Data, options: [NSAttributedString.DocumentReadingOptionKey : Any] = [:], documentAttributes dict: AutoreleasingUnsafeMutablePointer<NSDictionary?>?) throws
```

## Parameters

`data`

The data from which to create the string.

`options`

Attributes for interpreting the document contents. Specify the [`documentType`](/documentation/Foundation/NSAttributedString/DocumentAttributeKey/documentType) or [`fileType`](/documentation/Foundation/NSAttributedString/DocumentReadingOptionKey/fileType) option to interpret the data as a specific type. When sharing files between different platforms, specify the [`sourceTextScaling`](/documentation/Foundation/NSAttributedString/DocumentReadingOptionKey/sourceTextScaling) or [`targetTextScaling`](/documentation/Foundation/NSAttributedString/DocumentReadingOptionKey/targetTextScaling) options for any required text scaling behaviors. Specify the [`characterEncoding`](/documentation/Foundation/NSAttributedString/DocumentAttributeKey/characterEncoding) attribute for plain-text files. Specify the [`defaultAttributes`](/documentation/Foundation/NSAttributedString/DocumentAttributeKey/defaultAttributes) key to apply document attributes to the returned string. If you specify an empty dictionary, the method identifies the data format from the data itself.

`dict`

An in-out dictionary containing document-level attributes. On output, this method updates the dictionary to contain any document-specific keys found in the data. Specify `nil` if you don’t want the document attributes.

## Return Value

Returns an initialized attributed string object, or `nil` if the method can’t decode the data.

## Discussion

Don’t call this method from a background thread if the `options` dictionary includes the [`documentType`](/documentation/Foundation/NSAttributedString/DocumentAttributeKey/documentType) attribute with a value of [`html`](/documentation/Foundation/NSAttributedString/DocumentType/html). If you do, the method tries to synchronize with the main thread, fails, and times out. Calling it from the main thread works, but can still time out if the HTML contains references to external resources. The HTML import mechanism is meant for implementing something like markdown (that is, text styles, colors, and so on), not for general HTML import.

> Handling Errors in Swift:
> In Swift, this API is imported as an initializer and is marked with the `throws` keyword to indicate that it throws an error in cases of failure.
> 
> You call this method in a `try` expression and handle any errors in the `catch` clauses of a `do` statement, as described in [Error Handling](https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html) in [The Swift Programming Language](https://docs.swift.org/swift-book/) and `About Imported Cocoa Error Parameters`.

---

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)