Greetings, traveler!
Swift 6.2 introduces a powerful new data structure: InlineArray.
If you’ve ever needed an array with a fixed size, optimized for performance, but found tuples too clunky and standard arrays too flexible — this feature is for you.
Think of InlineArray as the best of both worlds:
- Like tuples, it has a predefined size known at compile time.
- Like arrays, it supports subscript access to elements.
- And unlike both, it brings performance optimizations thanks to its predictable layout.
What Problem Does InlineArray Solve?
Standard arrays in Swift are dynamic. They allow appending, removing, resizing, and copying — which is great for flexibility but not ideal for predictability and performance-critical code (like in real-time rendering or signal processing).
On the other hand, tuples give you fixed-size storage, but they’re awkward to work with because they lack indexing, iteration, or any collection-like behavior.
InlineArray solves this by providing a fixed-size buffer with subscript access and predictable memory usage, without the overhead of dynamic memory allocation.
Creating an InlineArray
You can define an InlineArray in a few ways, thanks to integer generics (introduced in SE-0452):
var scores: InlineArray<3, Int> = [85, 90, 95]Or let Swift infer the size and type based on the initializer:
var colors: InlineArray = ["Red", "Green", "Blue"]Both examples above create arrays of exactly three elements. This size is enforced by the compiler, so the following would not compile:
var tooMany = InlineArray<3, Int>([1, 2, 3, 4]) // ❌ ErrorReading and Writing Values
Although you can’t use .append() or .remove(at:), you can still access and modify individual elements:
scores[1] = 93
print(scores[1]) // 93You can iterate over them using the indices property:
for index in scores.indices {
print("Score \(index): \(scores[index])")
}When Should You Use InlineArray?
This structure is ideal when:
- You need guaranteed memory layout for performance (e.g. low-level computation, graphics, DSP).
- You want predictability — no resizes, no dynamic memory allocations.
- You’re dealing with a fixed number of values (like RGB colors, matrix elements, or constants in a shader pipeline).
A Note on Limitations
InlineArraydoes not conform toSequenceorCollection, which means you can’t usefor indirectly or methods likemap()orfilter().- It’s intentionally minimal — no dynamic resizing or automatic memory management — making it perfect for predictable, low-level code.
- It’s not a replacement for
Array, but a complement for specific use cases.
Looking Ahead
A related proposal, SE-0483, suggests adding custom literal syntax like this:
var scrores: [5 x Int] = .init(repeating: 0)Summary
InlineArray in Swift 6.2 is a niche but powerful tool:
- Fixed-size
- Subscriptable
- High-performance
- Great for memory-sensitive or low-level code
It’s another step in Swift’s evolution toward offering more control without giving up clarity.
