Ruby on Railsで言う所の Hash#compact のようなものは、Swiftにはなさそうなので、調べてみた。
ちなみに値のOptionalもunwrapする。
let nullableValueDict: [String : Any?] = [
"a": 1,
"b": "2",
"c": nil,
"d": nil,
"e": 5
]
// ["b": Optional("2"), "e": Optional(5), "a": Optional(1), "d": nil, "c": nil]
let dict = nullableValueDict.reduce([String : Any]()) { (dict, e) in
guard let value = e.1 else { return dict }
var dict = dict
dict[e.0] = value
return dict
}
// ["b": "2", "e": 5, "a": 1]
reduceを使ったパターンがシンプルで良いかなと。ワンライナーで簡単にできないかなと思ったがそうはいかなかった。
頻繁にやる必要があれば、Dictionaryの extension
を作った方が良さそう。