- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如何打开返回的字符串:
(Optional(Optional "blue"))
var cityName = String()
if let cityAnno = annotation as MGLAnnotation! {
cityName = String(stringInterpolationSegment: cityAnno.title!)
}
cityLabelName.text = ("\(cityName), \(county)")
cityLabelName 打印为 (Optional "New York")
最佳答案
给定一个双重可选,例如这个双重包装的 String
:
let a: String?? = "hello"
print(a as Any) // "Optional(Optional("hello"))\n"
@Leo,showed你可以使用可选绑定(bind)两次:
if let temp = a, let value = temp {
print(value) // "hello\n"
}
或强制展开两次:
print(value!!) // don't do this - you're just asking for a crash
这里有另外 5 种方法可以用来安全地解包 double 可选:
方法一:
您还可以使用模式匹配:
if case let value?? = a {
print(value) // "hello\n"
}
正如@netigger 在 their answer 中指出的那样,这也可以写成:
if case .some(.some(let value)) = a {
print(value) // "hello\n"
}
虽然不够简洁,但可能更容易阅读。
方法二:
或者,您可以使用 nil 合并运算符 ??
两次:
print((a ?? "") ?? "") // "hello\n"
注意:与此处介绍的其他方法不同,这将始终产生一个值。 ""
(空 String
)在任一个可选值是 nil
时使用。
方法三:
或者您可以使用 nil 合并运算符 ??
和可选绑定(bind):
if let value = a ?? nil {
print(value) // "hello\n"
}
这是如何运作的?
使用双重包装的可选值,变量持有的值可以是以下三种情况之一:Optional(Optional("some string"))
, Optional(nil)
如果内部可选为 nil
,或 nil
如果外部可选为 nil
。所以一个?? nil
展开外部可选。如果外部可选项为 nil
,则 ??
将其替换为默认值 nil
。如果 a
是 Optional(nil)
,那么 ??
将解开外部可选,留下 nil
。此时,如果内部可选或外部可选为 nil
,您将得到一个 String?
为 nil
。如果里面有一个 String
,你会得到 Optional("some string")
。
最后,可选绑定(bind) (if let
) 解包Optional("some string")
得到"some string"
或 optional binding 失败,如果任一个 optionals 为 nil
并跳过该 block 。
方法四:
此外,您可以使用 flatMap
和可选绑定(bind):
if let value = a.flatMap({ $0 }) {
print(value) // "hello\n"
}
方法五:
有条件地将值转换为类型。令人惊讶的是,这将删除所有级别的可选值:
let a: String?? = "hello"
let b: String??????? = "bye"
if let value = a as? String {
print(value) // "hello\n"
}
print(b as Any) // "Optional(Optional(Optional(Optional(Optional(Optional(Optional("bye")))))))\n"
if let value = b as? String {
print(value) // "bye\n"
}
关于swift - 如何展开双重可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049246/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!