Swift 6.2 新语法糖:在字符串插值里直接给 Optional 写默认值

参考原文:Making String Interpolation Smarter in Swift 6.2: Default Values for Optionals

一句话看懂新特性

旧写法(nil-coalescing)

swift 复制代码
let name: String? = nil
print("Hi \(name ?? "Guest")")          // OK,同类型

新写法(Swift 6.2 插值默认值)

swift 复制代码
print("Hi \(name, default: "Guest")")   // 等价,但支持**异类型**默认值

关键差异:?? 要求左右类型一致;(default:) 把默认值直接当字符串用,无视原始类型!

异类型痛点:旧语法搞不定

swift 复制代码
let count: Int? = nil

// ❌ 编译失败:Int 与 String 不匹配
print("Count: \(count ?? "Unknown")")

// ✅ Swift 6.2 直接通过
print("Count: \(count, default: "Unknown")")   // 输出 "Count: Unknown"

省去了手动 .map(String.init) ?? "Unknown" 的繁琐步骤。

真实场景:用户资料拼接

swift 复制代码
struct User {
    var username: String?
    var email: String?
    var age: Int?
}

let user = User(username: nil, email: "jane@example.com", age: nil)

print("""
User Info:
- Username: \(user.username, default: "Guest")
- Email: \(user.email, default: "Not provided")
- Age: \(user.age, default: "Unknown")
""")

旧写法对比

swift 复制代码
"- Username: \(user.username ?? "Guest")"
"- Age: \(user.age.map(String.init) ?? "Unknown")"   // 手动 map

新语法一行搞定,可读性大幅提升。

日志 & 调试神器

swift 复制代码
func logEvent(name: String?, duration: Double?) {
    print("Event '\(name, default: "Unnamed")' ran for \(duration, default: "an unknown amount of time")")
}

logEvent(name: nil, duration: nil)
// Output: Event 'Unnamed' ran for an unknown amount of time

无需提前拆包、转换类型,插值处直接给默认值。

语法要点速记

特性 说明
可用版本 Swift 6.2+
插值格式 (optional, default: 任意表达式)
类型要求 无;默认值会被直接当 String
??共存 完全兼容,按场景选择

何时用它而非 ??

场景 (default:) ??
默认值与 Optional 类型不同
默认值是同类型、已存在 皆可 ✅ 更短
需要复杂表达式/函数调用 ✅ 可读 ❌ 过长

一句话总结

同类型用 ??,异类型或懒得转换时用 (default:)

Swift 6.2 这个小糖让字符串插值兼顾安全与优雅,再不用为"Optional 转 String"写大段模板代码!

相关推荐
songgeb13 小时前
iOS Audio后台模式下能否执行非Audio逻辑
ios·swift
东坡肘子3 天前
毕业 30 年同学群:一场 AI 引发的“真假难辨”危机 -- 肘子的 Swift 周报 #112
人工智能·swiftui·swift
Antonio9153 天前
【Swift】UIKit:UIAlertController、UIImageView、UIDatePicker、UIPickerView和UISwitch
ios·cocoa·swift
Antonio9153 天前
【Swift】UIKit:UISegmentedControl、UISlider、UIStepper、UITableView和UICollectionView
开发语言·ios·swift
1***81533 天前
Swift在服务端开发的可能性探索
开发语言·ios·swift
S***H2833 天前
Swift在系统级应用中的开发
开发语言·ios·swift
HarderCoder4 天前
SwiftUI 状态管理极简之道:从“最小状态”到“状态树”
swift
Antonio9154 天前
【Swift】 UIKit:UIGestureRecognizer和UIView Animation
开发语言·ios·swift
蒙小萌19934 天前
Swift UIKit MVVM + RxSwift Development Rules
开发语言·prompt·swift·rxswift
Antonio9154 天前
【Swift】Swift基础语法:函数、闭包、枚举、结构体、类与属性
开发语言·swift