Если вы просто вернете $0
, это добавляет уровень опциональности. Возвращаемое значение
[RequestParameter.param1: "value1", .param2: nil]
равно [RequestParameter: String?]
, что вводит двойную опциональность. Либо сделайте это:
extension Dictionary {
func nilFiltered<Wrapped>() -> [Key: Any] where Value == Wrapped? {
compactMapValues { $0 }
}
}
или если вам на самом деле не нужен Any
, избегайте этого рубина sh!
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
}
}
}