Swift 6 introduced compile-time data-race safety, which was a big step forward but also produced a wave of confusing warnings in existing apps. Swift 6.2, released alongside Xcode 26 in September 2025, focused on making that safety approachable, while adding new tools for high-performance code.
Swift 6
Compile-time data-race safety.
Swift 6.2Now
Approachable concurrency, with Xcode 26.
Swift 6.4
Simpler syntax, async defer, Subprocess 1.0.
Approachable concurrency
Most app code runs on the main thread, and most apps do not need to think about concurrency until they choose to. Swift 6.2 leans into that reality.
- Main actor by default (SE-0466)
- A new build setting lets a module infer
@MainActorisolation by default. For typical app targets this removes a large share of concurrency warnings, because code is single-threaded unless you opt into more. - Async functions stay where they are called (SE-0461)
- With the approachable concurrency settings enabled, a non-isolated
asyncfunction runs on the caller's actor instead of hopping to a background thread. - @concurrent
- When you genuinely want work off the current actor, you say so.
struct ImageProcessor {
@concurrent
func thumbnail(from data: Data) async -> Data {
// Expensive work that should run off the main actor
resize(data, to: 200)
}
}InlineArray and Span
Two new standard library types target performance-sensitive code.
InlineArray
SE-0453- What
- a fixed-size array stored inline
- No heap allocation
Useful for small, known-size buffers.
Span
SE-0447- What
- fast, bounds-checked access to contiguous memory
- A safe alternative to unsafe pointers
Useful for parsing and performance-sensitive loops.
var rgb: InlineArray<3, UInt8> = [255, 128, 0]
rgb[1] = 64Raw identifiers for readable tests
Identifiers can now contain spaces and other characters when wrapped in backticks (SE-0451). It is particularly nice for test names with Swift Testing.
import Testing
@Test func `order total includes all items`() {
let order = Order(items: [.init(price: 2.5, qty: 2), .init(price: 3, qty: 1)])
#expect(order.total == 8)
}Swift Testing improvements
Swift Testing, the modern replacement for XCTest-style assertions, gained exit tests, which verify that code terminates as expected under certain conditions, and attachments, which let you save extra files or data alongside test results for easier debugging.
Beyond Apple platforms
Swift 6.2 added official support for building to WebAssembly, extending Swift into browsers and other Wasm runtimes, and the official Swift extension for VS Code continued to mature, making Swift a practical option for server and cross-platform work outside Xcode.
What to do in your projects
- 1
Try the new defaults in a branch
Enable approachable concurrency and default main-actor isolation, rebuild, and review the remaining warnings.
- 2
Mark expensive work with @concurrent
Rather than relying on implicit background execution.
- 3
Adopt Swift Testing
For all new tests.
Check your understanding
1/2With approachable concurrency enabled, where does a non-isolated async function run?
SE-0461 stops surprising hops to the background.
2/2How do you explicitly run work off the current actor?
@concurrent makes background execution a deliberate choice.
You got 0 out of 2.
New to Swift, or need a refresher? Start with the Swift cheat sheet and the Codable and async/await guide.
Swift has moved on since: see What's new in Swift 6.4, released in September 2026.
Build settings and defaults can differ between Xcode templates and Swift package manifests. Check the Swift.org release notes for the exact settings your project uses.
