我有一个let map : [String: String]
and a let key: String?
.
最简洁的访问方式是什么map[key]
(并取回String?
如果我有一个key
and None
如果我没有)?
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]
为了避免与“正常”下标方法混淆,并使
代码的读者更清楚的意图,您可以定义
带有外部参数名称的下标方法:
extension Dictionary {
subscript(optional optKey : Key?) -> Value? {
return optKey.flatMap { self[$0] }
}
}
let value = map[optional: key]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)