<!--
{
  "availability" : [
    "iOS: 8.0.0 -",
    "iPadOS: 8.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 10.10.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Swift",
  "identifier" : "/documentation/Swift/StaticString",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "Swift"
    ],
    "preciseIdentifier" : "s:s12StaticStringV"
  },
  "title" : "StaticString"
}
-->

# StaticString

A string type designed to represent text that is known at compile time.

```
@frozen struct StaticString
```

## Overview

Instances of the `StaticString` type are immutable.

`StaticString` provides only low-level access to its contents, unlike
Swift’s more commonly used `String` type. A static string can use
either of the following as its storage:

- a pointer to a null-terminated sequence of UTF-8 code units:
  
  ```
  let emoji: StaticString = "\u{1F600}"
  emoji.hasPointerRepresentation  //-> true
  emoji.isASCII                   //-> false
  emoji.unicodeScalar             //-> Fatal error!
  emoji.utf8CodeUnitCount         //-> 4
  emoji.utf8Start[0]              //-> 0xF0
  emoji.utf8Start[1]              //-> 0x9F
  emoji.utf8Start[2]              //-> 0x98
  emoji.utf8Start[3]              //-> 0x80
  emoji.utf8Start[4]              //-> 0x00
  ```
- a single Unicode scalar value, under very limited circumstances:
  
  ```
  struct MyStaticScalar: ExpressibleByUnicodeScalarLiteral {
      typealias UnicodeScalarLiteralType = StaticString
      let value: StaticString
      init(unicodeScalarLiteral value: StaticString) {
          self.value = value
      }
  }
  
  let emoji: StaticString = MyStaticScalar("\u{1F600}").value
  emoji.hasPointerRepresentation  //-> false
  emoji.isASCII                   //-> false
  emoji.unicodeScalar.value       //-> 0x1F600
  emoji.utf8CodeUnitCount         //-> Fatal error!
  emoji.utf8Start                 //-> Fatal error!
  ```

You can use the `withUTF8Buffer(_:)` method to access a static string’s
contents, regardless of which representation the static string uses.

```
emoji.withUTF8Buffer { utf8 in
    utf8.count  //-> 4
    utf8[0]     //-> 0xF0
    utf8[1]     //-> 0x9F
    utf8[2]     //-> 0x98
    utf8[3]     //-> 0x80
    utf8[4]     //-> Fatal error!
}
```

## Relationships

### Conforms To

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

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

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

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

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

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

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

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

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

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

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

---

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)