Swift:可选下标的可选链接

时间:2016-02-12 12:41:29

标签: swift optional

我有一个let map : [String: String]和一个let key: String?

访问map[key]的最简洁方法是什么(如果我有String?则返回key,如果我没有None,则返回richtextbox

2 个答案:

答案 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!]