我有一个let map : [String: String]
和一个let key: String?
。
访问map[key]
的最简洁方法是什么(如果我有String?
则返回key
,如果我没有None
,则返回richtextbox
?
答案 0 :(得分:4)
let value = key.flatMap { map[$0] }
将使用
来解决问题/// Returns `nil` if `self` is nil, `f(self!)` otherwise.
@warn_unused_result
public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?
来自struct Optional
的方法。
或者,您可以将其包装到自定义下标方法
中extension Dictionary {
subscript(optKey : Key?) -> Value? {
return optKey.flatMap { self[$0] }
}
}
并简单地写
let value = map[key]
避免与&#34;正常&#34;混淆下标方法,并制作 读者对你的代码的意图更清楚,你可以定义 带有外部参数名称的下标方法:
extension Dictionary {
subscript(optional optKey : Key?) -> Value? {
return optKey.flatMap { self[$0] }
}
}
let value = map[optional: key]
答案 1 :(得分:0)
我认为我正处于绝对不公平的状态
key == nil ? nil : map[key!]