简洁的可选展开
Concise Optional unwrapping
我正在学习Swift,我一直在尝试Optional
展开并遇到这种情况:
let displayText: String?
if let item = displayText {
if let value = Double(item) {
print("\(value)")
} else {
print("Didn't happen")
}
} else {
print("Didn't happen")
}
看起来像这样的事情是可能的:
let displayText: String?
if let item = Double(displayText) {
print("\(item)")
} else {
print("Didn't happen")
}
在我的例子中 displayText
可能是 nil
,所以强制展开不是我想要做的。我知道我可以将其隐藏在函数中以使其更简洁,但我真的很好奇是否还有其他选项。
有没有办法让这个更简洁?
几种可能性:
#1:将军。您可以在一行中放置多个展开变量声明。
if let item = displayText, value = Double(item) {
print("\(value)")
}
#2:骇客。在您的特定情况下,您还可以将空可选默认为您知道不会成为 Double:
的有效字符串表示形式的内容
if let value = Double(item ?? "") {
print("\(value)")
}
另一种可能性是在 Optionals 上使用 map
:
if let value = displayText.map({ Double([=10=]) }) {
print("\(value)")
}
我正在学习Swift,我一直在尝试Optional
展开并遇到这种情况:
let displayText: String?
if let item = displayText {
if let value = Double(item) {
print("\(value)")
} else {
print("Didn't happen")
}
} else {
print("Didn't happen")
}
看起来像这样的事情是可能的:
let displayText: String?
if let item = Double(displayText) {
print("\(item)")
} else {
print("Didn't happen")
}
在我的例子中 displayText
可能是 nil
,所以强制展开不是我想要做的。我知道我可以将其隐藏在函数中以使其更简洁,但我真的很好奇是否还有其他选项。
有没有办法让这个更简洁?
几种可能性:
#1:将军。您可以在一行中放置多个展开变量声明。
if let item = displayText, value = Double(item) {
print("\(value)")
}
#2:骇客。在您的特定情况下,您还可以将空可选默认为您知道不会成为 Double:
的有效字符串表示形式的内容if let value = Double(item ?? "") {
print("\(value)")
}
另一种可能性是在 Optionals 上使用 map
:
if let value = displayText.map({ Double([=10=]) }) {
print("\(value)")
}