字典上的compactMapValues返回带有nil值的字典。

我正在使用大多数文档中建议的方法。 compactMapValues { $0 }

extension Dictionary where Key == RequestParameter {

    func nilFiltered() -> [RequestParameter: Any] {
        return compactMapValues { $0 }
    }

}

RequestParameter是一个枚举,我正在调用类似的方法。
[RequestParameter.param1: "value1", RequestParameter.param2: nil]. nilFiltered()

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

最佳答案

如果仅返回$0,则添加了一定程度的可选项性

[RequestParameter.param1: "value1", .param2: nil]

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

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

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

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

这是我不喜欢的替代方法。

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

      return $0
    }
  }
}

关于ios - compactMapValues不过滤零值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61316001/

10-12 04:21