字典上的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/