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
相关产品推荐
相关产品推荐

