在 swift 中解包多个可选值
Unwrap multiple optionals in swift
我现在正在做一个 Swift 项目,我在开发应用程序的同时学习这门语言。我正在尝试创建一个函数来调用“警报弹出窗口”,并对可选展开有疑问。
func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
let title = title ?? nil
let message = message ?? nil
print("alert \(title), \(message),") // get optional value or nil, not String and nil...
let alert = UIAlertController(title: title, message: message, preferredStyle: style)
actions.forEach { alert.addAction([=11=])}
present(alert, animated: true)
}
因为我需要在应用程序中显示多个警报弹出窗口,所以我创建了一个自定义函数“showAlert”,我想像下面的代码一样调用这个函数。
showAlert(title: "delete", message: nil, actions: [deleteAction], style: .alert)
问题是标题和消息值可以是字符串或 nil(例如...警报控制器只显示标题但显示消息),所以我需要澄清标题和消息是否包含值。
我想在这里做的是,检查标题和消息值,并将 String 或 nil 应用到这部分,let alert = UIAlertController(title: title, message: message, preferredStyle: style)
。
我阅读了一些关于可选绑定的文章,但是如果我使用它来编写这段代码,
func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
if let title = title, let message = message {
print("alert \(title), \(message),") // get optional value
let alert = UIAlertController(title: title, message: message, preferredStyle: style)
actions.forEach { alert.addAction([=13=])}
present(alert, animated: true)
}
}
我只能处理title是String,message是String的情况。
我也想关心标题为零但消息为字符串,或标题为字符串且消息为零的情况。
那么我如何编写代码,在 showAlert 的标题和消息中使用 String 或 nil,并在这部分应用 String 或 nil,UIAlertController(title: title, message: message, preferredStyle: style)
?
您无需执行任何操作。 UIAlertController.init(title:message:preferredStyle:)
有以下签名。
convenience init(title: String?,
message: String?,
preferredStyle: UIAlertController.Style)
title
和 message
都已经是 String?
类型,因此您可以传递在函数参数中接收到的任何内容,而无需像在第一个版本中那样检查任何选项.
func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
// Notice how the redundant declarations in your version have been removed
print("alert \(title), \(message),") // get optional value or nil, not String and nil...
let alert = UIAlertController(title: title, message: message, preferredStyle: style)
actions.forEach { alert.addAction([=11=])}
present(alert, animated: true)
}
我现在正在做一个 Swift 项目,我在开发应用程序的同时学习这门语言。我正在尝试创建一个函数来调用“警报弹出窗口”,并对可选展开有疑问。
func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
let title = title ?? nil
let message = message ?? nil
print("alert \(title), \(message),") // get optional value or nil, not String and nil...
let alert = UIAlertController(title: title, message: message, preferredStyle: style)
actions.forEach { alert.addAction([=11=])}
present(alert, animated: true)
}
因为我需要在应用程序中显示多个警报弹出窗口,所以我创建了一个自定义函数“showAlert”,我想像下面的代码一样调用这个函数。
showAlert(title: "delete", message: nil, actions: [deleteAction], style: .alert)
问题是标题和消息值可以是字符串或 nil(例如...警报控制器只显示标题但显示消息),所以我需要澄清标题和消息是否包含值。
我想在这里做的是,检查标题和消息值,并将 String 或 nil 应用到这部分,let alert = UIAlertController(title: title, message: message, preferredStyle: style)
。
我阅读了一些关于可选绑定的文章,但是如果我使用它来编写这段代码,
func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
if let title = title, let message = message {
print("alert \(title), \(message),") // get optional value
let alert = UIAlertController(title: title, message: message, preferredStyle: style)
actions.forEach { alert.addAction([=13=])}
present(alert, animated: true)
}
}
我只能处理title是String,message是String的情况。 我也想关心标题为零但消息为字符串,或标题为字符串且消息为零的情况。
那么我如何编写代码,在 showAlert 的标题和消息中使用 String 或 nil,并在这部分应用 String 或 nil,UIAlertController(title: title, message: message, preferredStyle: style)
?
您无需执行任何操作。 UIAlertController.init(title:message:preferredStyle:)
有以下签名。
convenience init(title: String?,
message: String?,
preferredStyle: UIAlertController.Style)
title
和 message
都已经是 String?
类型,因此您可以传递在函数参数中接收到的任何内容,而无需像在第一个版本中那样检查任何选项.
func showAlert(title: String?, message: String?, actions: [UIAlertAction], style: UIAlertController.Style) {
// Notice how the redundant declarations in your version have been removed
print("alert \(title), \(message),") // get optional value or nil, not String and nil...
let alert = UIAlertController(title: title, message: message, preferredStyle: style)
actions.forEach { alert.addAction([=11=])}
present(alert, animated: true)
}