Мне не совсем понятно, что вы пытаетесь сделать, однако, это отфильтрует ваш массив cases
только в Test
объектах, которые содержат ненулевой values
в словаре сообщений:
let nonNil = cases.filter { (test) -> Bool in
return Array(test.message.values).filter({ (value) -> Bool in
return value == nil
}).count <= 0
}
Переменная nonNil
теперь содержит объекты Test
, где title равно «2», а title «4».
Вы можете дополнительно отфильтровать это, если вам нужен словарь [tags:preview]
. Нечто подобное может сделать это:
let tags = nonNil.map( { $0.message} ).flatMap { $0 }.reduce([String:String]()) { (accumulator, current) -> [String:String] in
guard let key = current.key, let value = current.value else { return accumulator }
var accum = accumulator
accum.updateValue(value, forKey: key)
return accum
}
Словарь tags
теперь содержит: ["tag1": "preview4", "tag2": "preview2"]