compactMapValues 不过滤 nil 值

compactMapValues not filtering nil values

compactMapValues 在具有 nil 值的字典 returns 字典上。

我正在使用大多数文档建议的方法。 compactMapValues { [=14=] }

extension Dictionary where Key == RequestParameter {

    func nilFiltered() -> [RequestParameter: Any] {
        return compactMapValues { [=10=] }
    }

}

RequestParameter 是一个枚举,我正在调用这样的方法..

[RequestParameter.param1: "value1", RequestParameter.param2: nil]. nilFiltered()

没有进行必要的过滤。这是一个已知错误还是我做错了什么?

如果您只是 return [=14=],那会增加一定程度的可选性

的 return 值
[RequestParameter.param1: "value1", .param2: nil]

是一个[RequestParameter: String?],它引入了双重可选性。要么这样做:

extension Dictionary {
  func nilFiltered<Wrapped>() -> [Key: Any] where Value == Wrapped? {
    compactMapValues { [=11=] }
  }
}

或者如果您实际上不需要 Any,请避免这些垃圾!

extension Dictionary {
  func nilFiltered<Wrapped>() -> [Key: Wrapped] where Value == Wrapped? {
    compactMapValues { [=12=] }
  }
}

这是一个我不喜欢的替代方案。

extension Dictionary {
  func nilFiltered() -> [Key: Any] {
    compactMapValues {
      if case nil as Value? = [=13=] {
        return nil
      }

      return [=13=]
    }
  }
}