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"写大段模板代码!

相关推荐
sakiko_6 小时前
OC基础语法(与Swift对比)-1
开发语言·ios·objective-c·swift
2501_9160088915 小时前
Flutter 开发 iOS,项目打包成 IPA,命令与免 Xcode两种方法
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
东坡肘子2 天前
举手之劳 -- 肘子的 Swift 周报 #151
人工智能·swiftui·swift
sakiko_2 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
weixin_531670894 天前
Interlude起来:动作动画和文字通知哪个更适合休息提醒?Mac上有没有用桌宠做动作引导的软件?
人工智能·macos·mac·swift
Daniel_Coder5 天前
我用 SwiftUI + GRDB 做了一个「按时吃药·服药提醒」App
ios·swiftui·swift·widgetkit
末代iOS程序员华仔6 天前
iOS个人开发者账号申请为啥会被卡住
ios·swift·figma
denggun123456 天前
信号量(DispatchSemaphore vs AsyncSemaphore)、swift协作式线程池 and python信号量
开发语言·python·swift
2501_915918416 天前
Swift IDE 有哪些?按平台和需求选择Swift 开发工具
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
懋学的前端攻城狮7 天前
把 SwiftUI List 换成 NSTableView:一次目录树卡顿的排查记录
macos·swiftui·swift