Добавить объявление

Что изменилось в работе со строками в Swift 6.2

Всем привет! Swift 6.2 принес нам небольшие, но очень приятные улучшения в работе со строками, которое многие давно ждали.

Какая была проблема:


До Swift 6.2 при интерполяции опциональных значений мы постоянно сталкивались с надоедливым ворнингом:

let age: Int? = nil

print("Your age: \(age)")
// String interpolation produces a debug description for an optional value

Компилятор предлагал два неидеальных решения:

  • String(describing:) - выводил nil, что некрасиво для пользователя.

  • Оператор ?? - требовал значение того же типа, что не всегда удобно.


let age: Int? = nil

// Некрасиво
Text("Your age: \(String(describing: age))") // Your age: nil

// Не всегда уместно
Text("Your age: \(age ?? 0)") // Your age: 0, но 0 может быть некорректным!

Что изменилось в Swift 6.2:


Теперь можно использовать параметр default прямо в интерполяции:

let age: Int? = nil

print("Your age: \(age, default: "not specified")") // Your age: not specified

Особенно удобно в SwiftUI:


struct ProfileView: View {
let username: String?
let level: Int?

var body: some View {
VStack {
Text("Username: \(username, default: "Guest")")
Text("Level: \(level, default: "Unknown")")
}
}
}

Что еще важно знать:


  • Тип значения не важен: default всегда принимает строку.

  • Работает с любыми опционалами: Int?, String?, Bool? и т.д.

  • Проверки на этапе компиляции: нет влияния на производительность.


Есть ограничение: к сожалению не работает с LocalizedStringKey.

Мое мнение:


Это одно из тех небольших улучшений, которые делают повседневную разработку удобнее. Больше не нужно выбирать между ворнингами компилятора и некрасивым выводом nil в интерфейсе.
26.09.2025 12 457