可选链接我有一个let map : [String: String]
和let key: String?
。斯威夫特:可选标
什么是访问map[key]
(并取回一个String?
如果我有一个key
和None
如果我没有)最简洁的方式?
可选链接我有一个let map : [String: String]
和let key: String?
。斯威夫特:可选标
什么是访问map[key]
(并取回一个String?
如果我有一个key
和None
如果我没有)最简洁的方式?
let value = key.flatMap { map[$0] }
会向特技
,使用从所述struct Optional
/// Returns `nil` if `self` is nil, `f(self!)` otherwise.
@warn_unused_result
public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?
方法。
或者,你可以换行到自定义标方法
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]
这个答案是越来越好:-)什么是扩展的范围有多大?我可以将其放到需要它的类,它不会对项目的其余任何副作用? – Thilo
@Thilo:分机不能“内部”一类的定义。您可以(据我所知)只使用[访问控制(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html)的水平,例如, 'private subscript ...'将范围限制为定义的源文件。 –