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=]
}
}
}
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=]
,那会增加一定程度的可选性
[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=]
}
}
}