swift 3 matrice de filtre de dictionnaires par la chaîne de valeur de la clé dans le dictionnaire

J'ai une classe comme cela

class FoundItem : NSObject {

var id : String!
var itemName : String!
var itemId : Int!
var foundBy : String!
var timeFound : String!

init(id: String,
    itemName: String,
    itemId: Int,
    foundBy: String,
    timeFound: String)

{
    self.id = id
    self.itemName = itemName
    self.itemId = itemId
    self.foundBy = foundBy
    self.timeFound = timeFound

}

et j'en référence sur mon

class MapViewVC: UIViewController, MKMapViewDelegate {

var found = [FoundItem]()

var filterItemName : String()

}

Mon FoundItem sont générés par dans un tableau de dictionnaires de ma classe de FoundItem à partir d'un firebase requête. Je puis obtenir une chaîne de itemName qui est généré à partir d'un autre point de vue sur un contrôleur de la vue d'une collection sur le didSelection fonction. Je veux profiter de cette chaîne, puis filtrer ou rechercher les tableaux avec la chaîne itemName qui est de l'égalité de l' itemName chaîne de mon précédent viewController. Ensuite enlevé le tableau de dictionnaires qui ne sont pas égales à la itemName. Non seulement les objets, mais l'ensemble du tableau qui contient la non-égalité de clé, valeur paire. J'ai cherché pendant des jours, et je suis coincé sur le filtrage d'un tableau de dictionnaires créés à partir d'une classe. J'ai regardé et essayé NSPredicates, pour-dans les boucles, mais tout ce qui arrive est la création d'un nouveau tableau ou bool qui trouve mes valeurs ou les clés sont égaux. Voici la fonction que j'ai écrite.

func filterArrayBySearch() {

    if self.filterItemName != nil {

        dump(found)

        let namePredicate = NSPredicate(format: "itemName like %@", "\(filterItemName)")
        let nameFilter = found.filter { namePredicate.evaluate(with: $0) }

        var crossRefNames = [String: [FoundItem]]()
        for nameItemArr in found {
            let listName = nameItem.itemName
            let key = listName

            if crossRefNames.index(forKey: key!) != nil {

                crossRefNames[key!]?.append(nameItemArr)

                if !("\(key)" == "\(filterItemName!)") {

                    print("------------- Success have found [[[[[[    \(key!)    ]]]]]] and \(filterItemName!) to be equal!!")

                     //crossRefNames[key!]?.append(nameItemArr)

                } else {

                    print("!! Could not find if \(key!) and \(filterItemName!) are equal !!")
                }


            } else {

                crossRefNames[key!] = [nameItemArr]
            }
        }

    } else {

        print("No Data from Search/FilterVC Controller")
    }
}

Peut aider quelqu'un? Il me semble qu'il serait de la simple tâche de trouver la valeur, puis filtrer les dictionnaires ne sont pas égaux à la itemName chaîne, mais je continue de frapper un mur. Et en cours d'exécution dans les boucles for-in moi-même 😛 essayé différentes choses pour réaliser la même tâche.

OriginalL'auteur Cory Billeaud | 2016-11-13