You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何对多个Optional可选值解包以适配UIAlertController参数

问题根因

UIAlertController 的初始化方法本身就支持传入 String? 类型的 title 和 message 参数,不需要你提前做统一解包处理。你最初代码里写的 let title = title ?? nil 是无意义操作,因为可选值本身就可以为 nil,这行代码不会改变原值的类型和内容。
你之前用 if let title = title, let message = message 的写法要求两个值同时非空才会执行内部逻辑,自然会漏掉只有一个值非空的场景。如果只是打印时不想输出 Optional() 包裹符,分别对两个值做单独处理即可。


最终可用代码

func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
    // 打印时单独处理可选值,避免输出Optional标识
    let printTitle = title ?? "nil"
    let printMessage = message ?? "nil"
    print("alert \(printTitle), \(printMessage)")
    
    // 直接传入原始可选参数即可,UIAlertController原生支持nil输入
    let alert = UIAlertController(title: title, message: message, preferredStyle: style)
    actions.forEach { alert.addAction($0) }
    present(alert, animated: true)
}

可选优化(简化调用)

可以给常用参数设置默认值,减少调用时的传参成本:

func showAlert(title: String?, 
               message: String? = nil, 
               actions: [UIAlertAction] = [], 
               style: UIAlertController.Style = .alert) {
    let printTitle = title ?? "nil"
    let printMessage = message ?? "nil"
    print("alert \(printTitle), \(printMessage)")
    
    let alert = UIAlertController(title: title, message: message, preferredStyle: style)
    actions.forEach { alert.addAction($0) }
    present(alert, animated: true)
}

// 调用示例
showAlert(title: "删除确认", message: "确定要删除该内容吗?", actions: [deleteAction])
showAlert(title: "操作成功")

内容的提问来源于stack exchange,提问作者Yuuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:36:03