Всем привет! 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 в интерфейсе.
➡️ Подписаться на канал
Мобильный трудоголик